#include <bits/stdc++.h>
using namespace std;
int n, m, s; //ct用来存方法数。
bool mmap[10][10];
int dir[8][2] = {{1, 2}, {1, -2}, {-1, 2}, {-1, -2}, {2, 1}, {2, -1}, {-2, 1}, {-2, -1}};
void dfs(int sy, int sx, int r) {//当前x,y坐标,还剩下几个点
if (r == 0) { //到达叶子端,说明完成了全部遍历。
s++;
return; //如果没有return 会再无休止的向下遍历。但这题其实不会,思考下为什么?
}
for (int i = 0; i < 8; i++) { //遍历8种走法
int y = sy + dir[i][1], x = sx + dir[i][0]; //定义走法坐标
if (y >= 0 && y < m && x >= 0 && x < n && mmap[y][x] == false) { //。
mmap[y][x]= true ;
dfs( y, x,r-1 );
mmap[y][x] = false ;
}
}
}
int main() {
int t, x, y;
cin >> t;
while (t--) {
cin >> n >> m >> x>>y;
s = 0; //s需要是全局变量,但在新一轮数据前需要重新归零。
memset(mmap, 0, sizeof(mmap));
mmap[y][x] = true;
dfs(y, x, n*m-1 );
cout << s << endl;
}
return 0;
}