#include <bits/stdc++.h>
using namespace std;
int n, edges = -1;
map<string, vector<string> > perm;
map<string, int> inout;
map<string, int>::iterator itr;
string req, a, b, eP, sP;
vector<string> v;
bool checkIfE() {
  int nNumofZero[1000] = {0};
  for (itr = inout.begin(); itr != inout.end(); itr++) {
    nNumofZero[itr->second + 500]++;
    if (!(itr->second == 1 || itr->second == -1 || itr->second == 0))
      return false;
    if (itr->second == 1) eP = itr->first;
    if (itr->second == -1) sP = itr->first;
  }
  return ((nNumofZero[501] == 1 && nNumofZero[499] == 1) ||
          (nNumofZero[501] == 0 && nNumofZero[499] == 0));
}
void dfs(string u) {
  while (perm[u].size() > 0) {
    string v = perm[u][perm[u].size() - 1];
    perm[u].pop_back();
    dfs(v);
  }
  edges++;
  v.push_back(u);
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    a = "";
    b = "";
    cin >> req;
    a += req[0];
    a += req[1];
    b += req[1];
    b += req[2];
    if (!inout.count(a))
      inout[a] = -1;
    else
      inout[a]--;
    inout[b]++;
    if (!perm.count(a)) perm[a];
    perm[a].push_back(b);
  }
  sP = a;
  if (!checkIfE())
    printf("NO");
  else {
    dfs(sP);
    if (edges != n) {
      printf("NO");
      return 0;
    }
    cout << "YES\n" << v[v.size() - 1];
    for (int i = v.size() - 2; i >= 0; i--) cout << v[i][1];
  }
  return 0;
}
