#include <bits/stdc++.h>
using namespace std;
int n, E, degin[5005], degout[5005], start[5005];
vector<int> ke[5005];
map<string, int> m;
map<int, string> rm;
list<int> cyc;
void addtomap(string s) {
  if (!m[s]) {
    m[s] = ++n;
    rm[n] = s;
  }
}
void EulerTour(list<int>::iterator it, int u) {
  for (; start[u] < ke[u].size();) {
    int v = ke[u][start[u]++];
    EulerTour(cyc.insert(it, v), v);
  }
}
int main() {
  scanf("%d", &E);
  for (int i = 1; i <= E; ++i) {
    char s[3];
    scanf("%s", s);
    string s1, s2;
    s1.assign(s, 0, 2);
    s2.assign(s, 1, 2);
    addtomap(s1);
    addtomap(s2);
    ke[m[s1]].push_back(m[s2]);
    ++degin[m[s2]];
    ++degout[m[s1]];
  }
  int cnts = 0, cntt = 0;
  for (int u = 1; u <= n; ++u)
    if (degin[u] > degout[u] + 1 || degin[u] + 1 < degout[u]) {
      puts("NO");
      return 0;
    } else if (degin[u] > degout[u])
      ++cnts;
    else if (degin[u] < degout[u])
      ++cntt;
  if (cnts > 1 || cntt > 1) {
    puts("NO");
    return 0;
  }
  int s = 0;
  for (int u = 1; u <= n; ++u)
    if (degout[u] > degin[u]) {
      s = u;
      break;
    }
  if (s == 0) s = 1;
  EulerTour(cyc.begin(), s);
  if (cyc.size() < E)
    puts("NO");
  else {
    puts("YES");
    cyc.reverse();
    cout << rm[s];
    for (list<int>::iterator it = cyc.begin(); it != cyc.end(); it++)
      printf("%c", rm[*it][1]);
  }
  return 0;
}
