#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000008;
int to[maxn],nxt[maxn],head[maxn],vis[maxn],use[maxn];
int sc[maxn],bd[maxn];
int top;
void add(int now,int tow){
to[++top]=tow;
nxt[top]=head[now];
head[now]=top;
}
bool dfs(int x){
for (int i=head[x];i!=0;i=nxt[i]){
int ver=to[i];
if(!vis[ver]){
vis[ver]=1;
if(use[ver]==0||dfs(use[ver])){
use[ver]=x;
return 1;
}
}
}
return 0;
}
void init(){
memset(vis, 0, sizeof(vis));
memset(to, 0, sizeof(to));
memset(nxt, 0, sizeof(nxt));
memset(head, 0, sizeof(head));
memset(use, 0, sizeof(use));
memset(sc, 0, sizeof(sc));
memset(bd, 0, sizeof(bd));
top=0;
}
int main(){
int t;
cin>>t;
for(int i=1;i<=t;i++){
int n, tot=0, ans=0, tmp;
cin>>n;
for(int i=1;i<=n;i++){
cin>>bd[i];
}
for(int i=1;i<=n;i++){
cin>>sc[i];
if(!bd[i]){sc[i]=0;tot++;}
else if(!sc[i]){add(i,i);tot++;}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>tmp;
if(tmp&&bd[j]){add(i,j);}
}
}
for(int i=1;i<=n;i++){
if(sc[i]){continue;}
if(dfs(i)){ans++;}
}
if(tot==ans){cout<<"^_^"<<endl;}
else{cout<<"T_T"<<endl;}
init();
}
}