#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;
}