#include <iostream>
using namespace std;
// b点坐标和马的坐标
int xb, yb, xh, yh;
// h为能否走的表示
long long h[30][30] = {0}, f[30][30] = {0};
int main() {
cin >> xb >> yb >> xh >> yh;
// 防止马在边界
xb += 2, yb += 2, xh += 2, yh += 2;
// 马脚和马的位置设为1 不可走
h[xh][yh] = 1;
h[xh + 1][yh + 2] = 1;
h[xh - 1][yh - 2] = 1;
h[xh + 2][yh + 1] = 1;
h[xh + 1][yh - 2] = 1;
h[xh - 1][yh + 2] = 1;
h[xh + 2][yh - 1] = 1;
h[xh - 2][yh + 1] = 1;
h[xh - 2][yh - 1] = 1;
// 初始化行列边界步数为1 因为边界没有别的地方可以到达
for(int i = 2; i < 30; i ++){
f[2][i] = f[i][2] = 1;
}
f[1][2] = 1;
for(int i = 2; i <= xb; i ++){
for(int j = 2; j <= yb; j ++){
if(h[i][j] == 1){
// 无法走 跳过
f[i][j] = 0;
continue;
}
f[i][j] = f[i - 1][j] + f[i][j - 1];
}
}
cout << f[xb][yb] << endl;
return 0;
}