#include <bits/stdc++.h>
using namespace std;
vector<int> G[256 * 256];
string sol;
int grade[256 * 256];
void Euler(int start) {
  stack<int> S;
  int node, nextNode;
  S.push(start);
  while (!S.empty()) {
    node = S.top();
    if (G[node].size() == 0) {
      S.pop();
      sol += (char)(node % 256);
    } else {
      nextNode = G[node].back();
      G[node].pop_back();
      S.push(nextNode);
    }
  }
}
int main() {
  int n, start, cnt = 0;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    string s;
    cin >> s;
    G[s[0] * 256 + s[1]].push_back(s[1] * 256 + s[2]);
    grade[s[0] * 256 + s[1]]++;
    grade[s[1] * 256 + s[2]]--;
    start = s[0] * 256 + s[1];
  }
  for (int i = 1; i < 256 * 256; i++) {
    if (grade[i] >= 2 || grade[i] <= -2) {
      cout << "NO\n";
      return 0;
    }
    if (grade[i] != 0) cnt++;
    if (grade[i] == 1) start = i;
  }
  if (cnt > 2) {
    cout << "NO\n";
    return 0;
  }
  Euler(start);
  sol += start / 256;
  reverse(sol.begin(), sol.end());
  if (sol.length() != n + 2)
    cout << "NO";
  else
    cout << "YES\n" << sol << "\n";
}
