#include <bits/stdc++.h>
using namespace std;
const int maxn = 10101;
int n;
vector<int> G[maxn];
int in[maxn], out[maxn];
int mp[256];
string ans;
int cnt[maxn];
char rmp[111];
void init() {
  for (int i = 'a'; i <= 'z'; i++) {
    mp[i] = i - 'a';
    rmp[i - 'a'] = i;
  }
  for (int i = 'A'; i <= 'Z'; i++) {
    mp[i] = i - 'A' + 26;
    rmp[i - 'A' + 26] = i;
  }
  for (int i = '0'; i <= '9'; i++) {
    mp[i] = i - '0' + 52;
    rmp[i - '0' + 52] = i;
  }
  memset(in, 0, sizeof(in));
  memset(out, 0, sizeof(out));
  memset(cnt, 0, sizeof(cnt));
}
void dfs(int u) {
  while (cnt[u] < G[u].size()) dfs(G[u][cnt[u]++]);
  ans += rmp[u % 62];
}
int main() {
  init();
  scanf("%d", &n);
  char str[22];
  for (int i = 0; i < n; i++) {
    scanf("%s", str);
    int u = mp[str[0]] * 62 + mp[str[1]];
    int v = mp[str[1]] * 62 + mp[str[2]];
    G[u].push_back(v);
    in[v]++, out[u]++;
  }
  int st = -1, ed = -1, tmp = 0;
  int su = 1, cnt = 0;
  for (int i = 0; i < maxn; i++) {
    if (abs(in[i] - out[i]) >= 2) {
      su = 0;
      break;
    }
    if (in[i] - out[i] == 1) {
      if (ed != -1) {
        su = 0;
        break;
      }
      ed = i;
    } else if (in[i] - out[i] == -1) {
      if (st != -1) {
        su = 0;
        break;
      }
      st = i;
    }
    if (in[i] != out[i]) cnt++;
    if (in[i] == out[i] && in[i] > 0) tmp = i;
  }
  if (cnt == 0) {
    st = tmp;
  }
  if (su) {
    dfs(st);
    ans.push_back(rmp[st / 62]);
    if (ans.length() == n + 2) {
      reverse(ans.begin(), ans.end());
      cout << "YES" << endl;
      cout << ans << endl;
    } else {
      cout << "NO" << endl;
    }
  } else
    cout << "NO" << endl;
  return 0;
}
