#include <bits/stdc++.h>

using namespace std;

vector<int> ans,p,q;

int f[30],dis[30],pre[30];
int g[30][30];
int n;
char ch[5];

void dfs(int now){

	f[now]=1;
	for (int i=1;i<=26;i++)
		if (g[now][i]==1){
			if (i==ans[0]){
				if (ans.size()>p.size()) p=ans;
			}
			if (f[i]==0){
				ans.push_back(i);
				dfs(i);
				ans.pop_back();
			}
		}
}

void re(int now){
	if (pre[now]>0) re(pre[now]);
	q.push_back(now);
}

void bfs(){

	int cnt=0;
	for (int tt=1;tt<=26;tt++){
		queue<int> Q;
		Q.push(tt);
		for (int i=1;i<=26;i++) dis[i]=f[i]=pre[i]=0;
		while (!Q.empty()){
			int now = Q.front();
			Q.pop();
			f[now]=0;
			for (int i=1;i<=26;i++)
				if (g[now][i]==1 && dis[i]<dis[now]+1){
					dis[i]=dis[now]+1;
					pre[i]=now;
					if (f[i]==0){
						f[i]=1;
						Q.push(i);
					}
				}
		}
		int tot=0,bo;
		for (int i=1;i<=26;i++)
			if (dis[i]>tot){
				tot=dis[i];
				bo=i;
			}

		if (tot>cnt){
			q.clear();
			cnt=tot;
			re(bo);
		}
	}
}

int T;

int main(){
	scanf("%d",&T);
	while (T--){
		scanf("%d",&n);
		memset(g,0,sizeof(g));
		
		for (int i=1;i<=26;i++)
			for (int j=1;j<=26;j++) g[i][j]=1;
		for (int i=1;i<=n;i++){
			scanf("%s",ch);
			g[ch[0]-'a'+1][ch[1]-'a'+1]=0;
		}

		p.clear();

		for (int i=1;i<=26;i++){
			memset(f,0,sizeof(f));
			ans.clear();
			ans.push_back(i);
			dfs(i);
		}

		if (p.size()){
			
			
			int l=p.size();
			while (1){
				for (int i=0;i<l;i++) p.push_back(p[i]);
				if (p.size()>50) break;
			}
			int n = min((int)p.size(),20);
			for (int i=1;i<=n;i++){
				for (int j=0;j<n;j++){
					printf("%c",p[i+j-1]+'a'-1);
				}
				printf("\n");
			}
		}else{
			bfs();

			int n = (q.size()+1)/2;
			if (n==0){
				printf("a\n");
				continue;
			}
			for (int i=1;i<=n;i++){
				for (int j=0;j<n;j++)
					printf("%c",q[i+j-1]+'a'-1);
				printf("\n");
			}
		}
	}
	return 0;
}
