#include <bits/stdc++.h>
using namespace std;
int v[125][125][125] = {{{0}}};
vector<int> idx[125][125];
int prefix[125][125] = {{0}};
int suffix[125][125] = {{0}};
int n;
string ans;
void dfs(int p, int q) {
  while (!idx[p][q].empty()) {
    int x = idx[p][q].back();
    idx[p][q].pop_back();
    dfs(q, x);
  }
  ans.push_back(char(q));
}
int main() {
  vector<string> q;
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    string s;
    cin >> s;
    prefix[s[0]][s[1]]++;
    suffix[s[1]][s[2]]++;
    v[s[0]][s[1]][s[2]]++;
    idx[s[0]][s[1]].push_back(s[2]);
    q.push_back(s);
  }
  string charset = "";
  for (int i = 'a'; i <= 'z'; i++) charset.push_back(char(i));
  for (int i = 'A'; i <= 'Z'; i++) charset.push_back(char(i));
  for (int i = '0'; i <= '9'; i++) charset.push_back(char(i));
  string start;
  for (char p : charset)
    for (char q : charset)
      if (abs(prefix[p][q] - suffix[p][q]) > 1) {
        cerr << "[DEBUG] "
             << "p"
             << " = " << p << endl;
        cerr << "[DEBUG] "
             << "q"
             << " = " << q << endl;
        cout << "NO";
        return 0;
      } else if (prefix[p][q] - suffix[p][q] == 1) {
        if (!start.empty()) {
          cout << "NO";
          return 0;
        }
        start.push_back(p);
        start.push_back(q);
      }
  if (start.empty()) {
    start.push_back(q[0][0]);
    start.push_back(q[0][1]);
  }
  dfs(start[0], start[1]);
  ans.push_back(start[0]);
  reverse((ans).begin(), (ans).end());
  if (ans.size() == n + 2) {
    cout << "YES\n" << ans;
    return 0;
  }
  cout << "NO";
}
