package luogu;
import java.util.*;
public class p1002 {
/*
棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示,A 点 (0, 0)(0,0)、B 点 (n, m)(n,m),同样马的位置坐标是需要给出的。
现在要求你计算出卒从 A 点能够到达 B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。
输入格式
一行四个正整数,分别表示 B 点坐标和马的坐标。
输出格式
一个整数,表示所有的路径条数。
*/
public static void main(String[] args) {
Scanner cin = new Scanner (System.in);
int bx = cin.nextInt();//B的X坐标
int by = cin.nextInt();//B点Y坐标
int my = cin.nextInt();//马的X坐标
int mx = cin.nextInt();//马的Y坐标
long m[][] = new long [bx+1][by+1];
for(int i = 0;i < bx+1;i++) {
for(int j = 0;j < by+1;j++) {
if(i==my-1 && (j==mx-2 ||j==mx+2))m[i][j]=0;//这个点是马的控制范围内的点 所以表示为零 代表此路不通耶
else if(i==my-2 && (j==mx-1 || j==mx+1))m[i][j]=0;//同上
else if(i==my+1 && (j==mx-2 ||j==mx+2))m[i][j]=0;//同上
else if(i==my+2 && (j==mx-1 || j==mx+1))m[i][j]=0;//同上
else if(i==my &&j==mx)m[i][j]=0;//这是马本身的坐标 此路同样不通
else m[i][j]=1;//其他的点暂时设为1 表示此路可通
}
}
//原理如下
/*6 6 3 3
*
* 1 1 1 1 1 1 1
* 1 2 x 1 x 1 2
* 1 x 0 1 1 x 2
* 1 1 1 0 1 1 3
* 1 x 1 1 1 x 3
* 1 1 x 1 x 0 3
* 1 2 2 2 3 3 6
*
*/
for(int i =0; i<bx+1;i++) {
for( int j =0; j<by+1; j++) {
if(m[i][j]==0)continue;//代表此路不通继续
else if(i==0 &&j==0)continue;//这是初始点 不用考虑
else if(i==0)m[i][j]=m[i][j-1];//x为零的一条线中我们只需要考虑每个点的左边,该点的前面连同几个点 这个点就会连同几个点
else if(j==0)m[i][j]=m[i-1][j];//y为零的一条线中我们只需要考虑该点的上面的一点的情况即可,原理同上
else m[i][j]=m[i-1][j]+m[i][j-1];//该点能连同的点数是该点左边和上面的点能连同的点的总数
}
}
System.out.println(m[bx][by]);
}
}