#include<cstdio>#include<cstring>#include<cstdlib>#define M 1100structEU{int l,r,y,next,vis;char w[22];} a[M],b[M];char s[M][22];int head[30],deg[30];int in[30],out[30],n,f[30],app[30];int strat,end,cnt;intcmp(constvoid*a,constvoid*b){structEU*p =(structEU*)a;structEU*q =(structEU*)b;returnstrcmp(q->w,p->w);}voidinit(){memset(in,0,sizeof(in));memset(out,0,sizeof(out));memset(app,0,sizeof(app));memset(head,-1,sizeof(head));for(int i =0; i <26; i++)
f[i]= i;for(int i =0; i < M; i++)
a[i].vis =0;}intfind(int x){return f[x]== x? f[x]: f[x]=find(f[x]);}intjudge(){int c1=0;for(int i =0; i <26; i++){if(!app[i])continue;int x = in[i]- out[i];if(abs(x)>1)return0;if(x>0) strat = i;if(x<0) end = i;if(x%2) c1++;if(c1>2)return0;}//if(c1!=0&&c1!=2) return 0;int k,i;for(i =0; i <26; i++)if(app[i])break;
k =find(i);for(int i = k+1; i <26; i++){if(!app[i])continue;if(k!=find(i))return0;}if(c1==0){for(i =0; i <26; i++)if(app[i])break;
strat = i;return1;}return2;}voiddfs(int u,int p){for(int i = head[u]; i !=-1; i = a[i].next)if(!a[i].vis){
a[i].vis =1;dfs(a[i].y,i);}if(p !=-1)strcpy(s[cnt++], a[p].w);}intmain(){int t;scanf("%d",&t);while(t--){scanf("%d",&n);init();for(int i =0; i < n; i++){scanf("%s",a[i].w);}qsort(a,n,sizeof(a[0]),cmp);for(int i =0; i < n; i++){int x = a[i].w[0]-'a';int y = a[i].w[strlen(a[i].w)-1]-'a';
in[x]++;
out[y]++;
app[x]=1;
app[y]=1;
a[i].y = y;
a[i].next = head[x];
head[x]= i;int fx =find(x);int fy =find(y);if(fx!=fy)
f[fx]= fy;}int fj=judge();if(fj==0){puts("***");continue;}
cnt =0;dfs(strat,-1);for(int i = n-1; i >0; i--)printf("%s.",s[i]);printf("%s\n",s[0]);}return0;}