#include <bits/stdc++.h>
using namespace std;
const int MAXN = 4000;
struct Stack {
  int top;
  int node[500000];
} s;
int Edge[MAXN][MAXN];
vector<int> path;
string se[200010];
map<string, int> ID;
string reid[4000];
int n;
void DFS(int x) {
  s.top++;
  s.node[s.top] = x;
  int i;
  for (i = 0; i < n; ++i) {
    if (Edge[x][i] > 0) {
      --Edge[x][i];
      DFS(i);
      break;
    }
  }
}
void Fleury(int start) {
  int i;
  s.top = 0;
  s.node[s.top] = start;
  while (s.top >= 0) {
    int b = 0;
    for (i = 0; i < n; ++i) {
      if (Edge[s.node[s.top]][i] > 0) {
        b = 1;
        break;
      }
    }
    if (b == 0) {
      path.push_back(s.node[s.top]);
      s.top--;
    } else {
      s.top--;
      DFS(s.node[s.top + 1]);
    }
  }
}
int cnt = 0;
bool solve() {
  int num = 0, beg = 0;
  path.clear();
  n = cnt;
  int in[MAXN], out[MAXN];
  memset(in, 0, sizeof(in)), memset(out, 0, sizeof(out));
  for (int i = (0); i < (n); ++i) {
    for (int j = (0); j < (n); ++j) {
      in[j] += Edge[i][j], out[i] += Edge[i][j];
    }
  }
  for (int i = (0); i < (n); ++i)
    if (out[i]) beg = i;
  for (int t = (0); t < (n); ++t) {
    if (in[t] != out[t]) {
      if (abs(in[t] - out[t]) != 1) return 0;
      ++num;
      if (in[t] == out[t] - 1) beg = t;
    }
  }
  if (num > 2) return 0;
  Fleury(beg);
  return 1;
}
int id(string s) {
  if (ID.count(s)) return ID[s];
  reid[cnt] = s;
  return ID[s] = cnt++;
}
vector<char> v;
int main() {
  int n;
  cin >> n;
  for (int t = (0); t < (n); ++t) cin >> se[t];
  for (int t = (0); t < (26); ++t) v.push_back('a' + t), v.push_back('A' + t);
  for (int t = (0); t < (10); ++t) v.push_back('0' + t);
  for (int i = (0); i < (62); ++i)
    for (int j = (0); j < (62); ++j) {
      string s;
      s += v[i], s += v[j];
      id(s);
    }
  memset(Edge, 0, sizeof(Edge));
  for (int t = (0); t < (n); ++t) {
    string a, b;
    a = se[t].substr(0, 2), b = se[t].substr(1, 2);
    ++Edge[id(a)][id(b)];
  }
  if (solve()) {
    reverse(path.begin(), path.end());
    if (path.size() + 1 != n + 2) {
      puts("NO");
      return 0;
    }
    puts("YES");
    cout << reid[path[0]];
    for (int t = (1); t < (path.size()); ++t) cout << reid[path[t]][1];
  } else
    puts("NO");
}
