把每一列提取出来,其实就是自身和上下左右一共五个方向
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=337077;
const int N=100;
int g[N][N];
int ROW,COL,k;
int ans;
int dx[]={0,1,-1,0,0};
int dy[]={0,0,0,-1,1};
bool check(int row,int col)
{
for(int i=0;i<5;i++)
{
int tx=row+dx[i],ty=col+dy[i];
if(g[tx][ty])return 0;
}
return 1;
}
void dfs(int id,int cnt)
{
if(cnt==k)
{
ans++; //找到一种合法组合
ans%=mod;
return;
}
for(int i=id;i<ROW*COL;i++)
{
//一维坐标变二维坐标
int row=i/ROW+1;
int col=i%ROW+1;
if(check(row,col))
{
g[row][col]=1;
cnt++;
dfs(i+1,cnt);
g[row][col]=0;
cnt--;
}
}
}
void solve()
{
ans=0;
cin>>ROW>>COL>>k;
dfs(0,0);
cout<<ans<<endl;
}
signed main()
{
cin.tie(nullptr)->sync_with_stdio(false);
int t=1;cin>>t;
while(t--)
{
solve();
}
return 0;
}