#include <iostream>
#include <string>
#include <stack>
#include <vector>
using namespace std;
int G[26][26]; //graph
vector<string> save[26][26];
int deg[26];
vector<int> res;
stack<int> st;
int main() {
// your code goes here
int N;
cin >> N;
for (int i=0; i < N; i++){
string t;
cin >> t;
int a = t[0]-'a';
int b = t[t.length() - 1] - 'a';
G[a][b]++;
save[a][b].push_back(t);
deg[a]++;
deg[b]--;
}
int tStart = -1;
int tFinish = -1;
for (int i=0; i < 26; i++)
if (!deg[i]) ;
else if (deg[i] == 1 && tStart == -1)
tStart = i;
else if (deg[i] == -1 && tFinish == -1)
tFinish = i;
else {
cout << "NO"<<endl;
return 0;
}
if (tStart == -1)
tStart = 0;
st.push(tStart);
while (!st.empty()){
int v = st.top();
int i;
for (i=0; i<26; ++i)
if (G[v][i])
break;
if (i == 26){
res.push_back (v);
st.pop();
}
else {
G[v][i]--;
st.push (i);
}
}
if (res.size() - 1 != N){
cout << "NO"<<endl;
return 0;
}
for (int i=res.size()-1; i ; i--){
cout << save[ res[i] ][res[i-1]].back()<<endl;
save[ res[i] ][res[i-1]].pop_back();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDx2ZWN0b3I+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgR1syNl1bMjZdOyAvL2dyYXBoCnZlY3RvcjxzdHJpbmc+IHNhdmVbMjZdWzI2XTsKaW50IGRlZ1syNl07CnZlY3RvcjxpbnQ+IHJlczsKc3RhY2s8aW50PiBzdDsKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglpbnQgTjsKCWNpbiA+PiBOOwoJZm9yIChpbnQgaT0wOyBpIDwgTjsgaSsrKXsKCQlzdHJpbmcgdDsKCQljaW4gPj4gdDsKCQlpbnQgYSA9IHRbMF0tJ2EnOwoJCWludCBiID0gdFt0Lmxlbmd0aCgpIC0gMV0gLSAnYSc7IAoJCUdbYV1bYl0rKzsKCQlzYXZlW2FdW2JdLnB1c2hfYmFjayh0KTsKCQlkZWdbYV0rKzsKCQlkZWdbYl0tLTsKCX0KCWludCB0U3RhcnQgPSAtMTsKCWludCB0RmluaXNoID0gLTE7Cglmb3IgKGludCBpPTA7IGkgPCAyNjsgaSsrKQoJCWlmICghZGVnW2ldKSA7CgkJZWxzZSBpZiAoZGVnW2ldID09IDEgJiYgdFN0YXJ0ID09IC0xKQoJCQl0U3RhcnQgPSBpOwoJCWVsc2UgaWYgKGRlZ1tpXSA9PSAtMSAmJiB0RmluaXNoID09IC0xKQoJCQl0RmluaXNoID0gaTsKCQllbHNlIHsKCQkJY291dCA8PCAiTk8iPDxlbmRsOwoJCQlyZXR1cm4gMDsKCQl9CglpZiAodFN0YXJ0ID09IC0xKQoJCXRTdGFydCA9IDA7CglzdC5wdXNoKHRTdGFydCk7Cgl3aGlsZSAoIXN0LmVtcHR5KCkpewoJCWludCB2ID0gc3QudG9wKCk7CgkJaW50IGk7CgkJZm9yIChpPTA7IGk8MjY7ICsraSkKCQkJaWYgKEdbdl1baV0pCgkJCQlicmVhazsKCQlpZiAoaSA9PSAyNil7CgkJCXJlcy5wdXNoX2JhY2sgKHYpOwoJCQlzdC5wb3AoKTsKCQl9CgkJZWxzZSB7CgkJCUdbdl1baV0tLTsKCQkJc3QucHVzaCAoaSk7CgkJfQoJfQoJaWYgKHJlcy5zaXplKCkgLSAxICE9IE4pewoJCWNvdXQgPDwgIk5PIjw8ZW5kbDsKCQlyZXR1cm4gMDsJCgl9Cglmb3IgKGludCBpPXJlcy5zaXplKCktMTsgaSA7IGktLSl7CgkJY291dCA8PCBzYXZlWyByZXNbaV0gXVtyZXNbaS0xXV0uYmFjaygpPDxlbmRsOwoJCSBzYXZlWyByZXNbaV0gXVtyZXNbaS0xXV0ucG9wX2JhY2soKTsKCX0KCXJldHVybiAwOwp9