#include<bits/stdc++.h>
using namespace std;
int x1,y1,x2,y2;//b点坐标:x1,y1;马坐标:x2,y2
unsigned long long board[25][25];//记录经过当前点的路径
bool vis[25][25];//记录每个点是否能走
const int fx[]={0,-2,-1,1,2,2,1,-1,-2};
const int fy[]={0,1,2,2,1,-1,-2,-2,-1};//马能到达的几个方位
int main(){
cin>>x1>>y1>>x2>>y2;
x1+=2;
y1+=2;
x2+=2;
y2+=2;//防止马的位置溢出,把所有点+2平移
for(int i=0;i<9;i++)
vis[x2+fx[i]][y2+fy[i]]=1;//把所有马的点标记上
board[2][2]=1;//初始化A点,A(0,0)->A(2,2)
for(int i=2;i<=x1;i++){
for(int j=2;j<=y1;j++){
if(vis[i][j]==0)//没有马可以走
board[i][j]=max(board[i][j],board[i-1][j]+board[i][j-1]);//状态转移方程
}
}
cout<<board[x1][y1];//输出终点的路径条数
return 0;
}