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