#include <bits/stdc++.h>
using namespace std;
map<string, int> id;
int in[4000], out[4000];
vector<int> adj[4000];
vector<int> A, B, C, path;
string val[4000];
struct dsu {
  dsu(int n) {
    for (int i = 0; i < n; i++) {
      P.push_back(i);
      R.push_back(1);
    }
  }
  int findSet(int x) { return (P[x] == x) ? x : P[x] = findSet(P[x]); }
  bool unionSet(int x, int y) {
    x = findSet(x), y = findSet(y);
    if (x == y) return false;
    if (R[x] > R[y]) {
      P[y] = x;
      R[x] += R[y];
    } else {
      P[x] = y;
      R[y] += R[x];
    }
    return true;
  }
  int getRank(int x) { return R[findSet(x)]; }

 private:
  vector<int> P, R;
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie();
  int n;
  cin >> n;
  int cnt = 0;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    string a = s.substr(0, 2);
    string b = s.substr(1, 2);
    if (!id.count(a)) {
      id[a] = cnt++;
      val[id[a]] = a;
    }
    if (!id.count(b)) {
      id[b] = cnt++;
      val[id[b]] = b;
    }
    in[id[b]]++;
    out[id[a]]++;
    adj[id[a]].push_back(id[b]);
  }
  dsu my_dsu(cnt);
  for (int i = 0; i < cnt; i++) {
    for (int j = 0; j < adj[i].size(); j++) my_dsu.unionSet(i, adj[i][j]);
  }
  for (int i = 0; i < cnt - 1; i++) {
    if (my_dsu.findSet(i) != my_dsu.findSet(i + 1)) {
      printf("NO\n");
      return 0;
    }
  }
  for (int i = 0; i < cnt; i++) {
    if (in[i] == out[i]) A.push_back(i);
    if (in[i] == out[i] + 1) B.push_back(i);
    if (out[i] == in[i] + 1) C.push_back(i);
  }
  int cur;
  stack<int> st;
  if (A.size() == cnt)
    cur = 0;
  else if (A.size() == cnt - 2 && B.size() == 1 && C.size() == 1)
    cur = C[0];
  else {
    printf("NO\n");
    return 0;
  }
  while (true) {
    if (adj[cur].size() == 0) {
      path.push_back(cur);
      if (st.empty()) break;
      cur = st.top();
      st.pop();
    } else {
      st.push(cur);
      int temp = cur;
      cur = adj[temp][adj[temp].size() - 1];
      adj[temp].pop_back();
    }
  }
  printf("YES\n");
  reverse(path.begin(), path.end());
  printf("%c%c", val[path[0]][0], val[path[0]][1]);
  for (int i = 1; i < path.size(); i++) printf("%c", val[path[i]][1]);
  printf("\n");
}
