import java.util.Scanner;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        String[] s = reader.readLine().split(" ");
        int x=Integer.parseInt(s[0]);
        int y=Integer.parseInt(s[1]);
        int x1=Integer.parseInt(s[2]);
        int y1=Integer.parseInt(s[3]);
        //设置数组为long类型,不然可能溢出
        long[][] arr=new long[x+2][y+2];
        
        for(int i=1;i<=x+1;i++){
            for(int j=1;j<=y+1;j++){
                //如果是第一个数则赋值为1,跳过
                if(i==1&&j==1){
                    arr[i][j]=1;
                    continue;
                }
                //如果是马的控制点则为0,跳过
                if(judge(i-1,j-1,x1,y1)){
                    arr[i][j]=0;
                    continue;
                }
                //既不是第一个数,也不是马的跳跃点
                //题目给出了只能向下或者向右走,那么该点就为上面和左边的点的路径和
                arr[i][j]=arr[i-1][j]+arr[i][j-1];
            }
        }
        System.out.print(arr[x+1][y+1]);
    }
    //题目给的条件: 该马所在的点  和  所有跳跃一步可达的点称为对方马的控制点。
    // |x1-x|+|y1-y|=3,且x1!=x,y1!=y
    public static boolean judge(int x,int y,int x1,int y1){
        return Math.abs(x1-x)+Math.abs(y1-y)==3&&x!=x1&&y!=y1||(x==x1&&y==y1);
    }
}