#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <list>
#include <string.h>
using namespace std;
vector<vector<int> > adj;
void makeGraph(const vector<string>& words) {
adj = vector<vector<int> >(26, vector<int>(26, 0));
for (int j=1; j<words.size(); ++j) {
int i = j-1, len = min(words[i].size(), words[j].size());
for (int k=0; k<len; ++k) {
if (words[i][k] != words[j][k]) {
int a = words[i][k] - 'a';
int b = words[j][k] - 'a';
printf("%c --> %c\n",a+97,b+97);
adj[a][b] = 1;
break;
}
}
}
}
vector<int> seen, order;
void dfs(int here) {
seen[here] = 1;
for (int there=0; there<adj.size(); ++there)
if (adj[here][there] && !seen[there])
dfs(there);
order.push_back(here);
}
vector<int> topologicalSort() {
int n = adj.size();
seen = vector<int>(n, 0);
order.clear();
for (int i=0; i<n; ++i)
if (!seen[i])
dfs(i);
reverse(order.begin(), order.end());
for (int i=0; i<n; ++i)
for (int j=i+1; j<n; ++j)
if (adj[order[j]][order[i]])
return vector<int>();
return order;
}
int main()
{
int c;
cin >> c;
while (c--) {
int n;
vector<string> words;
cin >> n;
for (int i=0; i<n; i++) {
string t;
cin >> t;
words.push_back(t);
}
makeGraph(words);
vector<int> ret = topologicalSort();
for (int i=0; i<ret.size(); i++) {
printf("%c",ret[i]+97);
//printf("%d ",ret[i]);
}
cout << endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHN0cmluZy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPHZlY3RvcjxpbnQ+ID4gYWRqOwp2b2lkIG1ha2VHcmFwaChjb25zdCB2ZWN0b3I8c3RyaW5nPiYgd29yZHMpIHsKICAgIGFkaiA9IHZlY3Rvcjx2ZWN0b3I8aW50PiA+KDI2LCB2ZWN0b3I8aW50PigyNiwgMCkpOwoJZm9yIChpbnQgaj0xOyBqPHdvcmRzLnNpemUoKTsgKytqKSB7CgkJaW50IGkgPSBqLTEsIGxlbiA9IG1pbih3b3Jkc1tpXS5zaXplKCksIHdvcmRzW2pdLnNpemUoKSk7CgkJZm9yIChpbnQgaz0wOyBrPGxlbjsgKytrKSB7CgkJCWlmICh3b3Jkc1tpXVtrXSAhPSB3b3Jkc1tqXVtrXSkgewoJCQkJaW50IGEgPSB3b3Jkc1tpXVtrXSAtICdhJzsKCQkJCWludCBiID0gd29yZHNbal1ba10gLSAnYSc7CgoJCQkJcHJpbnRmKCIlYyAtLT4gJWNcbiIsYSs5NyxiKzk3KTsKCQkJCWFkalthXVtiXSA9IDE7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KfQoKdmVjdG9yPGludD4gc2Vlbiwgb3JkZXI7CnZvaWQgZGZzKGludCBoZXJlKSB7CglzZWVuW2hlcmVdID0gMTsKCWZvciAoaW50IHRoZXJlPTA7IHRoZXJlPGFkai5zaXplKCk7ICsrdGhlcmUpCgkJaWYgKGFkaltoZXJlXVt0aGVyZV0gJiYgIXNlZW5bdGhlcmVdKQoJCQlkZnModGhlcmUpOwoJCglvcmRlci5wdXNoX2JhY2soaGVyZSk7Cn0KCnZlY3RvcjxpbnQ+IHRvcG9sb2dpY2FsU29ydCgpIHsKCWludCBuID0gYWRqLnNpemUoKTsKCXNlZW4gPSB2ZWN0b3I8aW50PihuLCAwKTsKCW9yZGVyLmNsZWFyKCk7CgoJZm9yIChpbnQgaT0wOyBpPG47ICsraSkKCQlpZiAoIXNlZW5baV0pCgkJCWRmcyhpKTsKCglyZXZlcnNlKG9yZGVyLmJlZ2luKCksIG9yZGVyLmVuZCgpKTsKCglmb3IgKGludCBpPTA7IGk8bjsgKytpKQoJCWZvciAoaW50IGo9aSsxOyBqPG47ICsraikKCQkJaWYgKGFkaltvcmRlcltqXV1bb3JkZXJbaV1dKQoJCQkJcmV0dXJuIHZlY3RvcjxpbnQ+KCk7CgkKCXJldHVybiBvcmRlcjsKfQoKaW50IG1haW4oKQp7CglpbnQgYzsKCWNpbiA+PiBjOwoJd2hpbGUgKGMtLSkgewoJCWludCBuOwoJCXZlY3RvcjxzdHJpbmc+IHdvcmRzOwoKCQljaW4gPj4gbjsKCQlmb3IgKGludCBpPTA7IGk8bjsgaSsrKSB7CgkJCXN0cmluZyB0OwoJCQljaW4gPj4gdDsKCQkJd29yZHMucHVzaF9iYWNrKHQpOwoJCX0KCQkKCQltYWtlR3JhcGgod29yZHMpOwoJCXZlY3RvcjxpbnQ+IHJldCA9IHRvcG9sb2dpY2FsU29ydCgpOwoKCQlmb3IgKGludCBpPTA7IGk8cmV0LnNpemUoKTsgaSsrKSB7CgkJCXByaW50ZigiJWMiLHJldFtpXSs5Nyk7CgkJCS8vcHJpbnRmKCIlZCAiLHJldFtpXSk7CgkJfQoKCQljb3V0IDw8IGVuZGw7Cgl9Cn0K