#include <bits/stdc++.h>
const long long MOD = 1e9 + 7;
const long long MAXN = 1e6 + 1;
using namespace std;
long long readInt() {
  bool minus1 = false;
  long long result = 0;
  char ch;
  ch = getchar();
  while (true) {
    if (ch == '-') break;
    if (ch >= '0' && ch <= '9') break;
    ch = getchar();
  }
  if (ch == '-')
    minus1 = true;
  else
    result = ch - '0';
  while (true) {
    ch = getchar();
    if (ch<'0' | ch> '9') break;
    result = result * 10 + (ch - '0');
  }
  if (minus1)
    return -result;
  else
    return result;
}
vector<int> g[MAXN];
vector<int> gr[MAXN];
map<string, int> maps;
int timer_maps = 0;
map<int, string> inv_maps;
int getID(string x) {
  if (!maps.count(x)) {
    maps[x] = timer_maps;
    timer_maps++;
    inv_maps[timer_maps - 1] = x;
  }
  return maps[x];
}
inline void road(char x, char y, char z) {
  string a = "";
  string b = "";
  a += x;
  a += y;
  b += y;
  b += z;
  g[getID(a)].push_back(getID(b));
  gr[getID(b)].push_back(getID(a));
}
int cnt[MAXN];
vector<int> ans;
void dfs(int v) {
  for (; cnt[v] < g[v].size();) {
    int to = g[v][cnt[v]];
    ++cnt[v];
    dfs(to);
  }
  ans.push_back(v);
}
int main() {
  int n = readInt();
  for (int i = 1; i <= n; i++) {
    string s;
    cin >> s;
    char one = s[0], two = s[1], three = s[2];
    road(one, two, three);
  }
  vector<int> start;
  for (int i = 0; i < timer_maps; i++) {
    if (g[i].size() == gr[i].size()) continue;
    if (g[i].size() - gr[i].size() == 1) {
      start.push_back(i);
      continue;
    }
    if (gr[i].size() - g[i].size() == 1) {
      continue;
    }
    cout << "NO";
    return 0;
  }
  if (start.size() > 1) {
    cout << "NO";
    return 0;
  }
  if (start.size() == 0) {
    for (int i = 0; i < timer_maps; i++) {
      if (g[i].size()) {
        start.push_back(i);
        break;
      }
    }
  }
  dfs(start[0]);
  if (ans.size() != n + 1) {
    cout << "NO";
    return 0;
  }
  reverse(ans.begin(), ans.end());
  cout << "YES" << endl;
  cout << inv_maps[ans[0]][0];
  for (int i = 0; i < ans.size(); i++) {
    cout << inv_maps[ans[i]][1];
  }
}
