#include <bits/stdc++.h>
using namespace std;
const int maxm = 1000000 + 5;
const int maxn = 6400 + 5;
struct Edge {
  int to, next;
} edges[maxm];
int indices[maxn];
int deg[maxn];
char ans[maxm];
int an;
int over;
inline int Trans_index(char* s) { return (s[0] - '0') * 80 + (s[1] - '0'); }
void DFS(int x) {
  while (indices[x] != -1) {
    int y = edges[indices[x]].to;
    indices[x] = edges[indices[x]].next;
    DFS(y);
  }
  ans[an++] = x / 80 + '0';
}
int main() {
  int n;
  scanf("%d\n", &n);
  memset(indices, 0xff, sizeof(indices));
  int start;
  for (int i = 0; i < n; i++) {
    char line[5];
    gets(line);
    int x = start = Trans_index(line);
    edges[i].to = Trans_index(line + 1);
    ;
    edges[i].next = indices[x];
    indices[x] = i;
    deg[edges[i].to]++;
    deg[x]--;
  }
  int cnt_err = 0;
  over = -1;
  for (int i = 0; i < maxn; i++) {
    if (deg[i] == 0)
      continue;
    else if (deg[i] < 0)
      start = i, cnt_err -= deg[i];
    else
      over = i, cnt_err += deg[i];
  }
  if (cnt_err != 0 && cnt_err != 2) {
    puts("NO");
    return 0;
  }
  DFS(start);
  for (int i = 0; i < maxn; i++) {
    if (indices[i] != -1) {
      printf("NO");
      return 0;
    }
  }
  puts("YES");
  reverse(ans, ans + an);
  if (cnt_err == 0) over = start;
  ans[an++] = '0' + over % 80;
  ans[an++] = '\0';
  puts(ans);
  return 0;
}
