#include <iostream>
#include<stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
#include <math.h>
#include <queue>
#include <stack>
using namespace std;
const int N = 9 + 10;
int n,m,a,b;
int cnt;
bool st[N][N];
void dfs(int x,int y,int s)
{
if(s == n*m) //走过的点数 和棋盘的点数相等就可以退出了
{
cnt ++;
return;
}
st[x][y] =true;
int dx[8] = {-1,-1,1,1,2,2,-2,-2}, dy[8] ={2,-2,2,-2,1,-1,1,-1}; //一共有8个方向可以移动
for(int i = 0; i < 8; i++)
{
int q = x + dx[i], w = y + dy[i];
if(q >= 0 && w >= 0 && q < n && w < m && !st[q][w]) //横坐标要小于n,纵坐标要小于y. 第三次错这里了
{
st[q][w] = true;
dfs(q,w,s + 1);
st[q][w] = false;
}
}
}
int main()
{
int t ;
cin >> t;
while(t -- )
{
cnt = 0;
cin >> n >> m >> a >> b;
memset(st, 0 , sizeof st);
dfs(a,b,1);
if(cnt) cout << cnt << endl;
else
cout << 0 <<endl;
}
return 0;
}