#include <bits/stdc++.h>
using namespace std;
int T1, T2, V[1000005], i, head[10005], next[1000005], e[1000005], p[10005],
    P[10005], ans[200005], sum, cnt, n, o, l[200005], X, Y, pp[10005], Q[10005],
    SS, G[10005], f[10005];
int GG[10005][105], F[10005][105], Time;
char TT;
char s[200005][10];
int getf(int k) { return f[k] == k ? f[k] : f[k] = getf(f[k]); }
void work(int x) { printf("%c", P[x % 65]); }
void dfs(int x, int y) {
  for (int i = 1; i <= F[x][0]; i++)
    if (GG[x][i]) {
      GG[x][i]--;
      dfs(F[x][i], y + 1);
    }
  ans[++Time] = x;
}
void add(int a, int b, int c) {
  int i;
  for (i = 1; i <= F[b][0]; i++)
    if (F[b][i] == c) break;
  F[b][0] = max(F[b][0], i);
  GG[b][i]++;
  F[b][i] = c;
}
int main() {
  scanf("%d", &n);
  for (i = '0'; i <= '9'; i++) {
    pp[i] = ++cnt;
    P[cnt] = i;
  }
  for (i = 'a'; i <= 'z'; i++) {
    pp[i] = ++cnt;
    P[cnt] = i;
  }
  for (i = 'A'; i <= 'Z'; i++) {
    pp[i] = ++cnt;
    P[cnt] = i;
  }
  for (i = 1; i <= 65 * 66; i++) f[i] = i;
  for (i = 1; i <= n; i++) {
    scanf("%s", s[i]);
    X = pp[s[i][0]] * 65 + pp[s[i][1]];
    Y = pp[s[i][1]] * 65 + pp[s[i][2]];
    f[getf(X)] = getf(Y);
    Q[X] = Q[Y] = 1;
    if (X != Y) {
      sum++;
      add(++o, X, Y);
      Q[X] = Q[Y] = 1;
    } else
      p[X]++;
    l[X]++;
    l[Y]--;
  }
  for (i = 1; i <= 65 * 66; i++)
    if (l[i] == 1)
      T1++;
    else if (l[i] == -1)
      T2++;
    else if (l[i] != 0) {
      cout << "NO";
      return 0;
    }
  for (i = 1; i <= 65 * 66; i++)
    if (Q[i]) G[getf(i)] = 1;
  for (i = 1; i <= 65 * 66; i++) SS += G[i];
  if (SS > 1) {
    cout << "NO";
    return 0;
  }
  if (T1 > 1 || T2 > 1) {
    cout << "NO";
    return 0;
  }
  for (i = 1; i <= 65 * 66; i++)
    if (l[i] == 1) break;
  if (i > 65 * 66) i = X;
  TT = P[i / 65];
  dfs(i, 1);
  cout << "YES" << endl << TT;
  for (i = Time; i >= 1; i--) {
    work(ans[i]);
    while (p[ans[i]]) {
      p[ans[i]]--;
      work(ans[i]);
    }
  }
  return 0;
}
