#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n;
map<string, int> out, in, used;
map<string, vector<string>> g;
vector<string> res;
void dfs(string v) {
  used[v] = 1;
  int sz = (int)g[v].size();
  for (int i = 0; i < sz; i++) {
    if (g[v].size() == 0) break;
    string s = g[v].back();
    g[v].pop_back();
    dfs(s);
  }
  res.push_back(v);
}
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  cin >> n;
  set<string> S;
  for (int i = 1; i <= n; i++) {
    string s;
    cin >> s;
    string fi = s.substr(0, 2), se = s.substr(1, 2);
    g[fi].push_back(se);
    in[se]++, out[fi]++;
    S.insert(fi);
    S.insert(se);
  }
  int ok = 1, cnt = 0;
  string st, en;
  for (string s : S) {
    if (in[s] != out[s]) {
      cnt++;
      if (in[s] == out[s] + 1) {
        en = s;
      } else if (out[s] == in[s] + 1) {
        st = s;
      }
    }
  }
  if (cnt > 2) {
    cout << "NO" << endl;
    return 0;
  }
  if (cnt > 0 && (en.empty() || st.empty())) {
    cout << "NO" << endl;
    return 0;
  }
  if (st.empty()) st = *S.begin();
  dfs(st);
  for (string s : S) {
    if (used[s] == 0) {
      cout << "NO" << endl;
      return 0;
    }
  }
  cout << "YES" << endl;
  reverse(res.begin(), res.end());
  cout << res[0];
  for (int i = 1; i < res.size(); i++) {
    cout << res[i][1];
  }
  cout << endl;
  return 0;
}
