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