#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > g[10000];
vector<int> res;
int d[10000];
bool u[10000];
int cnt[10000];
inline int foo(char a, char b) { return (a - '0') * 100 + (b - '0'); }
void dfs(int v) {
  u[v] = true;
  for (int i = 0; i < g[v].size(); i++) {
    if (!u[g[v][i].first]) dfs(g[v][i].first);
  }
}
void euler(int v) {
  while (cnt[v] < g[v].size()) {
    euler(g[v][cnt[v]++].first);
  }
  res.push_back(v);
}
inline char qwe(int v) { return (v % 100) + '0'; }
int main() {
  int n;
  scanf("%d", &n);
  char s[4];
  int a, b;
  for (int i = 0; i < n; i++) {
    scanf(" %s", s);
    a = foo(s[0], s[1]);
    b = foo(s[1], s[2]);
    g[a].push_back(pair<int, int>(b, 0));
    d[b]++;
  }
  int f = 0;
  int first = a;
  for (int i = 0; i < 10000; i++) {
    if (d[i] != g[i].size()) {
      if (abs(d[i] - (int)g[i].size()) > 1) {
        puts("NO");
        return 0;
      }
      f++;
    }
    if (g[i].size() > d[i]) first = i;
  }
  if (f > 2) {
    puts("NO");
    return 0;
  }
  dfs(first);
  for (int i = 0; i < 10000; i++) {
    if (g[i].size() || d[i]) {
      if (!u[i]) {
        puts("NO");
        return 0;
      }
    }
  }
  euler(first);
  puts("YES");
  printf("%c", (res[res.size() - 1] / 100) + '0');
  for (int i = res.size() - 1; i >= 0; i--) {
    printf("%c", qwe(res[i]));
  }
  return 0;
}
