#include<bits/stdc++.h>
#define pb(x) push_back(x)
#define all(x) x.begin(), x.end()
#define cout2(x, y) cout << x << " " << y << endl
#define N 200004
#define MAXE 400004
using namespace std;
int next[MAXE], to[MAXE], last[N], E;
void addEdge(int u, int v){
next[E] = last[u], to[E] = v, last[u] = E++;
}
string getNode(int node){
string ans = "";
while(node > 0)ans += char(node%128), node /= 128;
reverse(all(ans));
return ans;
}
bool vis_edge[MAXE];
string aux, res = "";
void solve(int u, int id){
if(id == 0){
aux = getNode(u);
res += aux;
}
for(int e = last[u]; e != -1; e = next[e]){
int v = to[e];
if(vis_edge[e])continue;
vis_edge[e] = true;
aux = getNode(v);
res += aux[1];
solve(v, 1);
}
}
bool vis[N];
int in[N], out[N];
void DFS(int u){
if(vis[u])return;
vis[u] = true;
for(int e = last[u]; e != -1; e = next[e]){
int v = to[e];
DFS(v);
}
}
int main(){
int n;
while(cin>>n){
string s;
int u, v;
set<int>S;
memset(last, -1, sizeof last);
E = 0;
for(int i = 0; i < n; i++){
cin>>s;
u = s[0] * 128 + s[1];
v = s[1] * 128 + s[2];
addEdge(u, v);
S.insert(u);
S.insert(v);
in[v]++;
out[u]++;
}
vector<int>nodes(all(S));
int ip = 0, comp, ini;
for(int i = 0; i < nodes.size(); i++){
if(!vis[nodes[i]])comp++, DFS(nodes[i]);
if(abs(in[nodes[i]] - out[nodes[i]]) == 1)ip++;
else if(in[nodes[i]] != out[nodes[i]])ip = 100;
if(in[nodes[i]] - out[nodes[i]] == -1)ini = nodes[i];
}
if(comp == 1 && (ip == 0 || ip == 2)){
cout << "YES" << endl;
int nod;
if(ip == 2)nod = ini;
else nod = nodes[0];
solve(nod, 0);
cout << res << endl;
}
else puts("NO");
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBwYih4KSBwdXNoX2JhY2soeCkKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgY291dDIoeCwgeSkgY291dCA8PCB4IDw8ICIgIiA8PCB5IDw8ICBlbmRsCiNkZWZpbmUgTiAyMDAwMDQKI2RlZmluZSBNQVhFIDQwMDAwNAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBuZXh0W01BWEVdLCB0b1tNQVhFXSwgbGFzdFtOXSwgRTsKCnZvaWQgYWRkRWRnZShpbnQgdSwgaW50IHYpewogICAgCiAgICBuZXh0W0VdID0gbGFzdFt1XSwgdG9bRV0gPSB2LCBsYXN0W3VdID0gRSsrOwp9CgpzdHJpbmcgZ2V0Tm9kZShpbnQgbm9kZSl7CiAgICAKICAgIHN0cmluZyBhbnMgPSAiIjsKICAgIHdoaWxlKG5vZGUgPiAwKWFucyArPSBjaGFyKG5vZGUlMTI4KSwgbm9kZSAvPSAxMjg7CiAgICAKICAgIHJldmVyc2UoYWxsKGFucykpOwogICAgcmV0dXJuIGFuczsKfQoKYm9vbCB2aXNfZWRnZVtNQVhFXTsKc3RyaW5nIGF1eCwgcmVzID0gIiI7Cgp2b2lkIHNvbHZlKGludCB1LCBpbnQgaWQpewoKICAgIGlmKGlkID09IDApewogICAgICAgIAogICAgICAgIGF1eCA9IGdldE5vZGUodSk7CiAgICAgICAgcmVzICs9IGF1eDsKICAgIH0KICAgIAogICAgZm9yKGludCBlID0gbGFzdFt1XTsgZSAhPSAtMTsgZSA9IG5leHRbZV0pewogICAgCiAgICAgICAgaW50IHYgPSB0b1tlXTsKICAgICAgICBpZih2aXNfZWRnZVtlXSljb250aW51ZTsKCiAgICAgICAgdmlzX2VkZ2VbZV0gPSB0cnVlOwogICAgICAgIGF1eCA9IGdldE5vZGUodik7CiAgICAgICAgCiAgICAgICAgcmVzICs9IGF1eFsxXTsKICAgICAgICBzb2x2ZSh2LCAxKTsgICAgCiAgICB9CiAgICAKfQoKYm9vbCB2aXNbTl07CmludCBpbltOXSwgb3V0W05dOwoKdm9pZCBERlMoaW50IHUpewogICAgCiAgICBpZih2aXNbdV0pcmV0dXJuOwogICAgdmlzW3VdID0gdHJ1ZTsKCiAgICBmb3IoaW50IGUgPSBsYXN0W3VdOyBlICE9IC0xOyBlID0gbmV4dFtlXSl7CiAgICAKICAgICAgICBpbnQgdiA9IHRvW2VdOwogICAgICAgIERGUyh2KTsKICAgIH0KfQoKaW50IG1haW4oKXsKCiAgICBpbnQgbjsKICAgIHdoaWxlKGNpbj4+bil7CiAgICAgICAgCiAgICAgICAgc3RyaW5nIHM7CiAgICAgICAgaW50IHUsIHY7CiAgICAgICAgCiAgICAgICAgc2V0PGludD5TOwogICAgICAgIG1lbXNldChsYXN0LCAtMSwgc2l6ZW9mIGxhc3QpOwogICAgICAgIEUgPSAwOwogICAgICAgIAogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgICAgICAKICAgICAgICAgICAgY2luPj5zOwogICAgICAgICAgICB1ID0gc1swXSAqIDEyOCArIHNbMV07CiAgICAgICAgICAgIHYgPSBzWzFdICogMTI4ICsgc1syXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGFkZEVkZ2UodSwgdik7CiAgICAgICAgICAgIAogICAgICAgICAgICBTLmluc2VydCh1KTsKICAgICAgICAgICAgUy5pbnNlcnQodik7CiAgICAgICAgICAgIAogICAgICAgICAgICBpblt2XSsrOyAgICAgICAgCiAgICAgICAgICAgIG91dFt1XSsrOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2ZWN0b3I8aW50Pm5vZGVzKGFsbChTKSk7CiAgICAgICAgCiAgICAgICAgaW50IGlwID0gMCwgY29tcCwgaW5pOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKyl7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZighdmlzW25vZGVzW2ldXSljb21wKyssIERGUyhub2Rlc1tpXSk7CiAgICAgICAgICAgIGlmKGFicyhpbltub2Rlc1tpXV0gLSBvdXRbbm9kZXNbaV1dKSA9PSAxKWlwKys7CiAgICAgICAgICAgIGVsc2UgaWYoaW5bbm9kZXNbaV1dICE9IG91dFtub2Rlc1tpXV0paXAgPSAxMDA7IAogICAgICAgICAgICBpZihpbltub2Rlc1tpXV0gLSBvdXRbbm9kZXNbaV1dID09IC0xKWluaSA9IG5vZGVzW2ldOwogICAgICAgIH0KCiAgICAgICAgaWYoY29tcCA9PSAxICYmIChpcCA9PSAwIHx8IGlwID09IDIpKXsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvdXQgPDwgIllFUyIgPDwgZW5kbDsKICAgICAgICAgICAgaW50IG5vZDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKGlwID09IDIpbm9kID0gaW5pOwogICAgICAgICAgICBlbHNlIG5vZCA9IG5vZGVzWzBdOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHNvbHZlKG5vZCwgMCk7CiAgICAgICAgICAgIGNvdXQgPDwgcmVzIDw8IGVuZGw7ICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIGVsc2UgcHV0cygiTk8iKTsKICAgICAgICAKICAgIH0KCn0KCg==