#include<bits/stdc++.h>usingnamespace std;constint maxn =1e5+10;int son[maxn][10], idx;
vector<string> tmp;voidinit(){
idx =0;
tmp.clear();memset(son,0,sizeof son);}voidinsert(string &s){int p =0;for(char&c : s){int u = c -'0';if(!son[p][u])
son[p][u]=++idx;
p = son[p][u];}}boolquery(string &s){int p =0;for(char&c : s){int u = c -'0';
p = son[p][u];}for(int i =0; i <10;++i)if(son[p][i])returntrue;returnfalse;}intmain(){freopen("in.txt","r",stdin);int T;
cin >> T;while(T--){init();int n;
cin >> n;for(int i =0; i < n;++i){
string num;
cin >> num;insert(num);
tmp.push_back(num);}bool f =false;for(int i =0; i < n &&!f;++i)if(query(tmp[i]))
f =true;puts(!f ?"YES":"NO");}return0;}
#include<bits/stdc++.h>usingnamespace std;constint maxn =3e5;int son1[maxn][26], idx1;//前缀树 int son2[maxn][26], idx2;//后缀树 bool vis1[maxn], vis2[maxn];int sum[maxn/3];
vector<string> vs;voidinsert1(string &word)//构造前缀树 {int p =0;for(char&c : word){int u = c -'a';if(!son1[p][u])
son1[p][u]=++idx1;
p = son1[p][u];}
vis1[p]=true;}voidquery1(string &word)//将word的前缀单词位置标记+1 {int p =0;for(int i =0; i < word.size()-1;++i){int u = word[i]-'a';
p = son1[p][u];if(vis1[p])++sum[i];}}voidinsert2(string &word)//构造后缀树 {int p =0;for(int i = word.size()-1; i >=0;--i){int u = word[i]-'a';if(!son2[p][u])
son2[p][u]=++idx2;
p = son2[p][u];}
vis2[p]=true;}voidquery2(string &word)//将word的后缀单词位置前一位标记+1 {int p =0;for(int i = word.size()-1; i >0;--i){int u = word[i]-'a';
p = son2[p][u];if(vis2[p])++sum[i-1];}}boolcheck(string &word){for(int i =0; i < word.size()-1; i++)if(sum[i]==2)returntrue;returnfalse;}intmain(){// freopen("in.txt", "r", stdin);
string tmp;while(cin >> tmp){insert1(tmp);insert2(tmp);
vs.push_back(tmp);}
set<string> ans;for(string &t : vs){memset(sum,0,sizeof sum);query1(t);query2(t);if(check(t))
ans.insert(t);}for(auto t : ans)
cout << t << endl;return0;}