#include <bits/stdc++.h>
using namespace std;
const int N = 400005;
int n;
map<string, int> M;
map<int, string> M2;
vector<int> graf[N];
int degree[N];
int in[N], out[N];
int vertex = 1;
void load() {
  scanf("%d", &n);
  int cnt = 1;
  for (int i = 0; i < n; i++) {
    string tmp;
    cin >> tmp;
    string tmp1 = tmp.substr(0, 2);
    string tmp2 = tmp.substr(1, 2);
    if (!M[tmp1]) M[tmp1] = cnt, M2[cnt] = tmp1, cnt++;
    if (!M[tmp2]) M[tmp2] = cnt, M2[cnt] = tmp2, cnt++;
    int x = M[tmp1];
    int y = M[tmp2];
    degree[x]++;
    degree[y]++;
    in[y]++;
    out[x]++;
    graf[x].push_back(y);
  }
  vertex = cnt;
}
int start;
vector<int> path;
void euler(int node) {
  while (!graf[node].empty()) {
    int curr = graf[node].back();
    graf[node].pop_back();
    euler(curr);
  }
  path.push_back(node);
}
void solve() {
  int cnt = 0;
  start = 1;
  for (int i = 1; i < vertex; i++) {
    if (out[i] == in[i]) continue;
    if (out[i] - in[i] == 1) start = i, cnt++;
    if (out[i] - in[i] == -1) cnt++;
    if (abs(out[i] - in[i]) > 1) {
      puts("NO");
      return;
    }
    if (cnt > 2) {
      puts("NO");
      return;
    }
  }
  euler(start);
  reverse(path.begin(), path.end());
  if (path.size() < n) {
    printf("NO\n");
    return;
  }
  cout << "YES" << endl;
  cout << M2[path[0]];
  for (int i = 1; i < path.size(); i++) {
    string tmp = M2[path[i]];
    cout << tmp[1];
  }
}
int main(void) {
  load();
  solve();
  return 0;
}
