#include<stdio.h>
#define c 2
int arr[100]={0};
int make_new_place(int x,int y,int direction)//i的四个取值代表着四个方向
{
int new_x,new_y,new_place;
switch (direction)
{
//左
case 0: new_x=x-1;
new_y=y;
break;
//上
case 1: new_x=x;
new_y=y+1;
break;
//右
case 2: new_x=x+1;
new_y=y;
break;
//下
case 3: new_x=x;
new_y=y-1;
break;
}
if (new_x>=0&&new_y>=0&&new_place<=(c*c-1))//new_place<=99是为了保证棋子不会出界
{
if (arr[new_place]==0)//棋子未出界且此位置没有走过,那么可以返回
{
new_place=new_x*c+new_y;
return new_place;
}
}
return -1;
}
void dfs(int x,int y,int end_x,int end_y,int * cnt)
{
int new_place;
//如果到达最后的位置,那么cnt+1
if (x==end_x&&y==end_y)
{
*cnt++;
return;
}
else
{
for (int i=0; i < 4; i++)
{
new_place=make_new_place(x,y,i);
if (new_place!=-1)
{
x=new_place/c;
y=new_place%c;
arr[new_place]=1;
dfs(x,y,end_x,end_y,cnt);
arr[new_place]=0;
}
}
}
}
int main()
{
int x,y,end_x,end_y,cnt=0;//先输入初始位置与最终位置
scanf("%d%d%d%d",&x,&y,&end_x,&end_y);
dfs(x,y,end_x,end_y,&cnt);
printf("%d",cnt);
return 0;
}