#include <bits/stdc++.h>
using namespace std;
int in[200005], out[200005];
int n, node, tut;
bool ok;
vector<int> v[200005], ans;
void fail() {
  printf("NO");
  exit(0);
}
void dfs(int node) {
  while ((int)v[node].size()) {
    int go = v[node].back();
    v[node].pop_back();
    dfs(go);
    ans.push_back(go);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    char s[5];
    scanf("%s", s);
    int x = s[0] * 270 + s[1];
    int y = s[1] * 270 + s[2];
    v[x].push_back(y);
    out[x]++;
    in[y]++;
    tut = x;
  }
  for (int i = 0; i <= 270 * 270; i++) {
    if (out[i] - in[i] == 1) {
      if (node) fail();
      node = i;
    }
    if (in[i] - out[i] == 1) {
      if (ok) fail();
      ok = true;
    }
    if (abs(in[i] - out[i]) > 1) {
      fail();
    }
  }
  if (!node) node = tut;
  dfs(node);
  ans.push_back(node);
  if ((int)ans.size() != n + 1) fail();
  reverse(ans.begin(), ans.end());
  printf("YES\n");
  for (int i = 0; i < (int)ans.size(); i++) {
    printf("%c", ans[i] / 270);
  }
  printf("%c", ans.back() % 270);
}
