#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
map<pair<char, char>, int> mp;
map<int, pair<char, char> > rev;
int mcnt, n, degree[4000], out[4000];
bool vis[maxn];
vector<pair<int, int> > G[4000];
vector<int> ans;
int ID(pair<char, char> p) {
  if (mp.count(p)) {
    return mp[p];
  }
  return mp[p] = mcnt++;
}
void Map(pair<char, char> p, int id) {
  if (rev.count(id)) return;
  rev[id] = p;
  return;
}
void dfs(int u) {
  while (out[u] < G[u].size()) {
    if (!vis[G[u][out[u]].second]) {
      vis[G[u][out[u]].second] = true;
      dfs(G[u][out[u]++].first);
    }
  }
  ans.push_back(u);
}
bool ok() {
  int x = 0, y = 0, st = 0;
  for (int i = 0; i < mcnt; i++) {
    if (degree[i] > 1 || degree[i] < -1) return false;
    if (degree[i] == 1) x++, st = i;
    if (degree[i] == -1) y++;
  }
  if (x > 1 || y > 1) return false;
  dfs(st);
  for (int i = 0; i < n; i++)
    if (!vis[i]) return false;
  return true;
}
int main() {
  scanf("%d", &n);
  char s[5];
  for (int i = 0; i < n; i++) {
    scanf("%s", s);
    pair<char, char> p1 = make_pair(s[0], s[1]), p2 = make_pair(s[1], s[2]);
    G[ID(p1)].push_back(make_pair(ID(p2), i));
    degree[ID(p1)]++, degree[ID(p2)]--;
    Map(p1, ID(p1)), Map(p2, ID(p2));
  }
  if (ok()) {
    printf("YES\n");
    for (vector<int>::iterator it = ans.end() - 1; it >= ans.begin(); --it) {
      if (it == ans.end() - 1) {
        printf("%c", rev[*it].first);
      }
      printf("%c", rev[*it].second);
    }
    printf("\n");
  } else
    printf("NO\n");
  return 0;
}
