//马走日
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=10;
int st[N][N];
int n,m,T,x,y;
int res;
int dx[8]={-1,-2,-2,-1,1,2,2,1},dy[8]={-2,-1,1,2,2,1,-1,-2};
void dfs(int u,int x,int y)
{
if(u==n*m)
{
res++;
return;
}
//开始爆搜
for(int i=0;i<8;i++)
{
int a=x+dx[i],b=y+dy[i];
if(a<0||a>=n||b<0||b>=m||st[a][b]) continue;
st[a][b]=1;
dfs(u+1,a,b);
st[a][b]=0;
}
}
int main()
{
cin>>T;
while(T--)
{
scanf("%d%d%d%d",&n,&m,&x,&y);
memset(st,0,sizeof(st));
st[x][y]=1;
res=0;
dfs(1,x,y);
cout<<res<<endl;
}
}
sorry,我就放到这里记录一下,没有写解释。。