#include<cstdio>#include<cstring>#include<vector>#include<stack>#include<algorithm>using namespace std;vector<int>e[1001];int p[30],in[30],out[30],n,t,r,c;int q[1111],vis[1111];char s[1111][30];int cmp(const void *s1,const void *s2){ return strcmp((char *)s1,(char *)s2)>0;}void init(){ memset(vis,0,sizeof(vis)); int i; for(i=1;i<=26;i++) { in[i]=out[i]=0; p[i]=i; } for(i=0;i<=1000;i++) e[i].clear();}int find(int i){ if(p[i]!=i) return find(p[i]); return p[i];}void mege(int a,int b){ a=find(a); b=find(b); if(a!=b) p[b]=a;}void Print(int i){ if(i!=-1) { Print(q[i]); if(c<n-1) printf("%s.",s[i]); else printf("%s",s[i]); c++; } else return;}void dfs(int i,int w){ if(w==n) { r=1; Print(i); return; } else { if(r==0) { int j,l; for(j=0;j<e[i].size();j++) { l=e[i][j]; if(!vis[l]&&i!=l) { vis[l]=1; q[l]=i; dfs(l,w+1); vis[l]=0; } } } }}int main(){ scanf("%d",&t); while(t--) { int i,j,start=0; r=c=0; init(); scanf("%d",&n); for(i=0;i<n;i++) { scanf("%s",s[i]); int L=strlen(s[i]); int a=s[i][0]-'a'+1; int b=s[i][L-1]-'a'+1; in[b]++; out[a]++; vis[a]=vis[b]=1; mege(a,b); } int tag=0,x=0,y=0,other=0,flag; for(i=1;i<=26;i++) { if(vis[i]) { if(find(i)==i) tag++; if(out[i]!=in[i]) { if(in[i]+1==out[i]) x++; else if(in[i]-1==out[i]) y++; else other++; } } } if(tag==1&&other==0&&((x==0&&y==0)||(x==1&&y==1))) flag=1; else flag=0; if(!flag) { printf("***n"); } else { qsort(s,n,sizeof(s[0]),cmp); if(x==0&&y==0) { for(i=1;i<=26;i++) if(vis[i]) { start=i;break; } } else { for(i=1;i<=26;i++) { if(vis[i]&&in[i]+1==out[i]) { start=i;break; } } } for(i=0;i<n;i++) { int l=strlen(s[i]); for(j=0;j<n;j++) { if(i!=j&&s[i][l-1]==s[j][0]) e[i].push_back(j); } } for(i=0;i<n;i++) { if(s[i][0]-'a'+1==start) { memset(vis,0,sizeof(vis)); q[i]=-1; vis[i]=1; dfs(i,1); } if(r) break; } printf("n"); } } return 0;}