#include <bits/stdc++.h>
using namespace std;
vector<int> e[200010];
bool ok;
int rd[400010], cd[400010];
int n, id, top, st, ed;
map<string, int> M;
string ss[400010];
string ans;
void addedge(int u, int v) {
  e[u].push_back(v);
  rd[v]++;
  cd[u]++;
}
void Init() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    string t1, t2;
    string s;
    cin >> s;
    int id1, id2;
    t1 = s.substr(0, 2);
    t2 = s.substr(1, 2);
    if (!M[t1]) {
      M[t1] = ++id;
      id1 = id;
      ss[id] = t1;
    } else
      id1 = M[t1];
    if (!M[t2]) {
      M[t2] = ++id;
      id2 = id;
      ss[id] = t2;
    } else
      id2 = M[t2];
    addedge(id1, id2);
  }
}
void dfs(int u, int tim) {
  int v;
  while (!e[u].empty()) {
    v = e[u].back();
    e[u].pop_back();
    dfs(v, tim + 1);
  }
  ans += ss[u][1];
}
int main() {
  Init();
  for (int i = 1; i <= id; i++) {
    if (cd[i] - rd[i] == 1) {
      if (st) {
        cout << "NO" << endl;
        return 0;
      } else
        st = i;
    } else if (cd[i] - rd[i] > 1) {
      cout << "NO" << endl;
      return 0;
    }
    if (rd[i] - cd[i] == 1) {
      if (ed) {
        cout << "NO" << endl;
        return 0;
      } else
        ed = i;
    } else if (rd[i] - cd[i] > 1) {
      cout << "NO" << endl;
      return 0;
    }
  }
  if (!st) st = 1;
  dfs(st, 0);
  ans += ss[st][0];
  if (ans.length() < n + 2)
    cout << "NO" << endl;
  else {
    cout << "YES" << endl;
    reverse(ans.begin(), ans.end());
    cout << ans << endl;
  }
  return 0;
}
