#include <bits/stdc++.h>
using namespace std;
const int N = 400005;
string s[N];
int idx[N], where[N], in[N], out[N];
vector<int> g[N];
list<int> answer;
void dfs(list<int>::iterator it, int u) {
  while (g[u].size() > 0) {
    int where = g[u].back();
    g[u].pop_back();
    dfs(answer.insert(it, where), where);
  }
}
int main() {
  int n;
  cin >> n;
  map<string, int> mapeo;
  int len = 0;
  for (int i = 0; i < n; ++i) {
    cin >> s[i];
    string first = s[i].substr(0, 2);
    if (mapeo.find(first) == mapeo.end()) {
      idx[len] = i;
      mapeo[first] = len++;
    }
    where[i] = mapeo[first];
  }
  int extra = 0;
  for (int i = 0; i < n; ++i) {
    string second = s[i].substr(1, 2);
    if (mapeo.find(second) == mapeo.end()) {
      s[extra + n] = second;
      idx[len] = extra + n;
      extra++;
      mapeo[second] = len++;
    }
    g[where[i]].push_back(mapeo[second]);
    out[where[i]]++;
    in[mapeo[second]]++;
  }
  if (extra > 1) {
    puts("NO");
    return 0;
  }
  int start = -1, end = -1;
  for (int i = 0; i < len; ++i) {
    if (out[i] - in[i] == 1) {
      if (start != -1) {
        puts("NO");
        return 0;
      }
      start = i;
    } else {
      if (in[i] - out[i] == 1) {
        if (end != -1) {
          puts("NO");
          return 0;
        }
        end = i;
      } else {
        if (out[i] - in[i] != 0) {
          puts("NO");
          return 0;
        }
      }
    }
  }
  if (start == -1 && end == -1) {
    start = end = 0;
  }
  if (start == -1 || end == -1) {
    puts("NO");
    return 0;
  }
  dfs(answer.insert(answer.begin(), start), start);
  if (answer.size() != n + 1) {
    puts("NO");
    return 0;
  }
  puts("YES");
  string cad;
  for (auto it : answer) {
    if (cad.size() == 0) {
      cad.push_back(s[idx[it]][1]);
    }
    cad.push_back(s[idx[it]][0]);
  }
  reverse(cad.begin(), cad.end());
  cout << cad << endl;
  return 0;
}
