//NOIP 2002 普及組 複賽 過河卒
//1314 【例3.6】過河卒(Noip2002)
//洛谷 P1002 過河卒
//樣例每通過,仔細看題,發現起點是從(0,0)開始,而誤以為是(1,1)開始,修改代碼
//樣例通過,送出,測試點3,4WA,重新讀題,發現沒說A!=B
//處理了A==B的情況,送出,測試點3,4WA,
//輸入:
//4 8 2 4
//輸出:
//0
//是一組好的測試資料,
//輸入測試資料,跟蹤程式,發現問題所在,如下圖,是錯誤資料
//下圖是正确資料
//邊界上,若有馬管轄的範圍,那麼之後的資料可能都是0,所謂一夫當關,萬夫莫開。
//馬上就行修改,送出AC。
//不借助測試資料,這個錯誤極難發現。
//2017-10-29 19:39
#include <stdio.h>
#include <string.h>
long long a[30][30];
int vis[30][30];
int next[][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
int main(){
int n,m,x,y,i,j,nx,ny;
memset(vis,0,sizeof(vis));
scanf("%d%d%d%d",&n,&m,&x,&y);
a[0][0]=0;//此處寫成vis[0][0]=1,a[0][0]=0;//處理A==B的情況
vis[x][y]=1,a[x][y]=0;//設定馬管轄的位置
for(i=0;i<8;i++){
nx=x+next[i][0],ny=y+next[i][1];
if(0<=nx&&nx<=n&&0<=ny&&ny<=m){
vis[nx][ny]=1,a[nx][ny]=0;
}
}
for(i=0;i<=n;i++)
if(vis[i][0]==1)while(i<=n){i++,a[i][0]=0;}
else a[i][0]=1;//for(i=0;i<=n;i++)a[i][0]=1;//此處寫成 for(i=0;i<=n;i++)a[i][1]=1;
for(j=0;j<=m;j++)
if(vis[0][j]==1)while(j<=m){j++,a[0][j]=0;}
else a[0][j]=1;//for(j=0;j<=m;j++)a[0][j]=1;//此處寫成 for(j=0;j<=m;j++)a[1][j]=1;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(vis[i][j]==0)
a[i][j]=a[i][j-1]+a[i-1][j];
printf("%lld\n",a[n][m]);
return 0;
}