#include <bits/stdc++.h>
using namespace std;
struct node {
  int v;
  int next;
} edge[2100000];
int head[2000000], cnt, vis[2000000];
int in[100000], out[100000], p_num, c[2100000];
void add(int u, int v) {
  edge[cnt].v = v;
  edge[cnt].next = head[u];
  head[u] = cnt++;
  return;
}
void dfs(int u) {
  int i, v;
  for (i = head[u]; i != -1; i = head[u]) {
    if (vis[i] == 0) {
      vis[i] = 1;
      head[u] = edge[i].next;
      dfs(edge[i].v);
    }
  }
  c[p_num++] = u;
}
int main() {
  int n, i, j, u, v;
  char str[10];
  memset(head, -1, sizeof(head));
  memset(vis, -1, sizeof(vis));
  cnt = 0;
  p_num = 0;
  scanf("%d", &n);
  for (i = 0; i < n; i++) {
    scanf("%s", str);
    u = str[0] * 1000 + str[1];
    v = str[1] * 1000 + str[2];
    add(u, v);
    if (vis[u] == -1) {
      vis[u] = p_num;
      c[p_num++] = u;
    }
    if (vis[v] == -1) {
      vis[v] = p_num;
      c[p_num++] = v;
    }
    in[vis[u]]++;
    in[vis[v]]--;
  }
  int flag1 = 0, flag2 = 0;
  for (i = 0; i < p_num; i++) {
    if (in[i] < -1 || in[i] > 1) break;
    if (in[i] == 1) flag1++;
    if (in[i] == -1) flag2++;
  }
  if (i < p_num || !(flag1 == flag2 && flag1 <= 1)) {
    printf("NO\n");
    return 0;
  }
  u = c[0];
  for (i = 0; i < p_num; i++)
    if (in[i] == 1) u = c[i];
  p_num = 0;
  memset(vis, 0, sizeof(vis));
  dfs(u);
  if (p_num < n + 1) {
    printf("NO\n");
    return 0;
  }
  printf("YES\n");
  printf("%c%c", c[p_num - 1] / 1000, c[p_num - 1] % 1000);
  for (i = p_num - 2; i >= 0; i--) printf("%c", c[i] % 1000);
  printf("\n");
  return 0;
}
