#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;
}