#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, l, in[1000009], out[1000009], p[1000009], ans, cn, t, x, y,
    z, mx, mn, s, cnin, cnout, flag, start;
char c[200005][5], d[1000009], ch;
map<string, int> mp;
string aa, bb, res, dd;
vector<int> g[200005];
void dfs(int u) {
  while (g[u].size() > 0) {
    int v = g[u].back();
    g[u].pop_back();
    dfs(v);
  }
  res.push_back(c[u][1]);
}
int main() {
  while (scanf("%d", &n) != EOF) {
    start = 1;
    flag = 1;
    cnin = cnout = 0;
    cn = 1;
    mp.clear();
    res.clear();
    memset(in, 0, sizeof(in));
    memset(out, 0, sizeof(out));
    memset(c, 0, sizeof(c));
    for (i = 0; i < 200005; i++) {
      g[i].clear();
    }
    for (i = 0; i < n; i++) {
      scanf("%s", d);
      dd = d;
      aa = dd.substr(0, 2);
      bb = dd.substr(1, 2);
      if (mp[aa] == 0) {
        mp[aa] = cn;
        c[cn][0] = aa[0];
        c[cn][1] = aa[1];
        cn++;
      }
      if (mp[bb] == 0) {
        mp[bb] = cn;
        c[cn][0] = bb[0];
        c[cn][1] = bb[1];
        cn++;
      }
      out[mp[aa]]++;
      in[mp[bb]]++;
      g[mp[aa]].push_back(mp[bb]);
    }
    for (i = 1; i < cn; i++) {
      if (abs(in[i] - out[i]) > 1) {
        flag = 0;
        break;
      }
      if (in[i] - out[i] == -1) {
        cnout++;
        start = i;
        if (cnout > 1) {
          flag = 0;
          break;
        }
      }
      if (in[i] - out[i] == 1) {
        cnin++;
        if (cnin > 1) {
          flag = 0;
          break;
        }
      }
    }
    if (cnin != cnout) {
      flag = 0;
    }
    dfs(start);
    res.push_back(c[start][0]);
    reverse(res.begin(), res.end());
    if ((flag == 0) || (res.size()) < n + 2) {
      printf("NO\n");
    } else {
      printf("YES\n");
      cout << res << endl;
    }
  }
  return 0;
}
