#include <cstring>
#include <cstdio>
using namespace std;
const int N = 10;
int n, m;
bool vis[N][N];
int res;
int stx, sty;
int dic[8][2] = {
{-2, -1}, {-2, 1}, {-1, 2}, {1, 2},
{2, 1}, {2, -1}, {1, -2}, {-1, -2}
};
int dx[8]={2,1,-1,-2,-2,-1,1,2};//方向数组
int dy[8]={1,2,2,1,-1,-2,-2,-1};//方向数组
bool check(int x, int y){
return (x >= 0 && x < n && y >= 0 && y < m);
}
void dfs(int x, int y, int pass){
if(pass == m*n){
res ++ ;
return ;
}
for(int i = 0; i < 8; i ++ ){
int a = x + dic[i][0];
int b = y + dic[i][1];
if((a >= 0 && a < n && b >= 0 && b < m) && !vis[a][b]){
vis[a][b] = true;
dfs(a, b, pass + 1);
vis[a][b] = false;
}
}
}
int main(){
// std::ios::sync_with_stdio(false); // 不加这个优化,最后一个用例就会超时
int T;
// cin >> T;
scanf("%d", &T);
while(T -- ){
// cin >> n >> m;
scanf("%d%d%d%d", &n, &m, &stx, &sty);
// cin >> stx >> sty;
// scanf("%d%d", &stx, &sty);
res = 0;
memset(vis, false, sizeof(vis));
vis[stx][sty] = true;
dfs(stx, sty, 1);
// cout << res << endl;
printf("%d\n", res);
}
return 0;
}