#include<vector>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=100;
int w[maxn][maxn],student[maxn],home[maxn],beder[maxn];
bool vis[maxn];
int t,n;
bool dfs(int u)
{
for(int i=1;i<=n;i++)
{
if(student[i]&&w[u][i]&&!vis[i])
{
vis[i]=1;
if(!beder[i]||dfs(beder[i]))
{
beder[i]=u;
return true;
}
}
}
return false;
}
void out()
{
for(int i=1;i<=n;i++)
{
if(home[i]!=1)
{
memset(vis,0,sizeof(vis));
if(!dfs(i))
{
cout<<"T_T"<<'\n';
return;
}
}
}
cout<<"^_^"<<'\n';
}
void reset()
{
memset(w,0,sizeof(w));
memset(beder,0,sizeof(beder));
memset(home,0,sizeof(home));
}
void in()
{
cin>>n;
for(int j=1;j<=n;j++)
cin>>student[j];
for(int j=1;j<=n;j++)
cin>>home[j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>w[i][j];
for(int i=1;i<=n;i++)
if(student[i])w[i][i]=1;
}
int main()
{
cin>>t;
for(int i=1;i<=t;i++)
{
in();
out();
reset();
}
}