#include<bits/stdc++.h> using namespace std; int vis[8][2]={-2,1,-1,2,1,2,2,1,2,-1,1,-2,-1,-2,-2,-1};//构造偏移量数组 int t,n,m,x,y,ans;//棋盘总共由(n)(m)个点 bool st[100][100];//如果st[i][j]==0 表示i,j这个坐标没有走过 st[a][b]==1表示a,b这个坐标走过 void dfs(int x,int y,int cnt){//出口 所有的点全部访问了if(cnt==(n)*(m)) {ans++;//按题操作 return;}//深搜就是暴力枚举for(int i=0;i<8;i++){int tx=x+vis[i][0],ty=y+vis[i][1];//判断是否合法:有没有越界、有没有走过if(tx>=0&&tx<n&&ty>=0&&ty<m && st[tx][ty]==0){//保存现场st[tx][ty]=1;dfs(tx,ty,cnt+1);//还原现场 st[tx][ty]=0; } } return; } int main() {cin>>t;while(t--){cin>>n>>m>>x>>y;//多组数据---》清空上轮数据对本轮的影响 memset(st,0,sizeof(st));ans=0;st[x][y]=1;dfs(x,y,1);cout<<ans<<endl;}return 0; }