#include<bits/stdc++.h>
using namespace std;
using ll = long long ;
using db = double;
const int N=105;
db a[N][N];
db eps=1e-7;
int main(){
int t;
cin>>t;
while(t--){
memset(a,0,sizeof(a));
int n;
cin>>n;
map<string,vector<int>> mp;
for(int i=1;i<=n;i++){
string s;
cin>>s;
string str;
for(int j=0;j<s.size();j++){
if(s[j]>='0'&&s[j]<='9'){
int num=0;
num+=s[j]-'0';
int k=j;
while(k+1<s.size()&&s[k+1]>='0'&&s[k+1]<='9'){
num=num*10+s[k+1]-'0';
k++;
}
j=k;
if(!mp.count(str)){
mp[str]=vector<int>(100,0);
mp[str][i]=num;
}else{
mp[str][i]=num;
}
str.clear();
}else{
str+=s[j];
}
}
}
int cnt=1;
for(auto t:mp){
// cout<<t.first<<endl;
auto v=t.second;
for(int i=1;i<=n;i++){
// cout<<x<<" ";
a[cnt][i]=v[i];
}
cnt++;
// cout<<endl;
}
cnt--;
// for(int i=1;i<=cnt;i++){
// for(int j=1;j<=n;j++){
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
// }
// cout<<"------"<<endl;
for(int i=1;i<n;i++){//枚举列,最后一列不用枚举
int mx=i;
for(int j=i+1;j<=cnt;j++){//找到这一列中最大的值
if(fabs(a[j][i])>fabs(a[mx][i])) mx=j;
}
if(a[mx][i]==0) continue;//如果最大值是0直接过
for(int j=1;j<=n;j++) swap(a[i][j],a[mx][j]);//把最大值所在行放到“第一行”
for(int j=n;j>=1;j--) a[i][j]=a[i][j]/a[i][i];//把最大值变成1,它后面的数也除相同的倍数
for(int j=1;j<=cnt;j++){//枚举所有行,除了最大值所在行的列的值为1,其他行的该列的值全变为0
if(j!=i){
db tmp=a[j][i]/a[i][i];//系数
for(int k=1;k<=n;k++){
a[j][k]-=a[i][k]*tmp;
}
}
}
}
int rk=0;//秩
for(int i=1;i<=cnt;i++){
for(int j=1;j<=n;j++){
if(fabs(a[i][j])>eps){//浮点数精度问题,设一个最小值,小于该值的数看成0
rk++;
break;
}
}
}
if(n-rk>0){
cout<<"Y"<<endl;
}else{
cout<<"N"<<endl;
}
}
return 0;
}