#include <cstdio> #include <cstring> #include <iostream> #include <queue> #include <map> using namespace std; int Next[100010]; string s[100010]; void getNext(string s) { int i,j; i=0; j=-1; int len=s.length(); Next[0]=-1; while(i<len && j<len) { if(j==-1 || s[i]==s[j]) Next[++i]=++j; else j=Next[j]; } } bool kmp(string m,string s) { getNext(s); int i,j; i=j=0; int mlen=m.length();// i int slen=s.length();// j while(i<mlen && j<slen) { if(j==-1 || m[i]==s[j]) i++,j++; else j=Next[j]; } if(j==slen) return false; return true; } int main() { cin.sync_with_stdio(false); int t; cin>>t; while(t--) { int n; cin>>n; string ms; int mlen; int flag=1; for(int i=1;i<=n;i++) { cin>>s[i]; if(i==1) { mlen=s[i].length(); ms=s[i]; } else { int len=s[i].length(); if(len > mlen) { mlen=len; ms=s[i]; } } } flag=1; for(int i=1;i<=n;i++) { //string now=q.front(); //q.pop(); string now=s[i]; int len=now.length(); if(len==mlen && now != ms) { flag=0; break; } //mq.push(now); } if(flag==0) cout<<"No"<<endl; else { int zflag=1; for(int i=1;i<=n;i++) { string now=s[i]; if(kmp(ms,now)) { zflag=0; break; } } if(zflag==0) cout<<"No"<<endl; else cout<<ms<<endl; } } return 0; } // 补一发 kmp记录字串个数的