#include <bits/stdc++.h>
using namespace std;
int n;
multiset<int> g[70 * 70];
int indeg[70 * 70], outdeg[70 * 70];
vector<string> rev;
void dfs(int start, int cnta = 0) {
  cout << rev[start][1];
  outdeg[start]--;
  for (auto it = g[start].begin(); it != g[start].end(); it++) {
    int v = *it;
    if (cnta == n - 1) {
      indeg[v]--;
      g[start].erase(it);
      dfs(v, cnta + 1);
      break;
    } else if (outdeg[v]) {
      indeg[v]--;
      g[start].erase(it);
      dfs(v, cnta + 1);
      break;
    }
  }
}
void no() {
  cout << "NO" << endl;
  exit(0);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  rev.resize(70 * 70);
  map<string, int> ids;
  int id = 0;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    if (ids.count(s.substr(0, 2)) == 0) {
      ids[s.substr(0, 2)] = id++;
      rev[id - 1] = s.substr(0, 2);
    }
    if (ids.count(s.substr(1, 2)) == 0) {
      ids[s.substr(1, 2)] = id++;
      rev[id - 1] = s.substr(1, 2);
    }
    int id1 = ids[s.substr(0, 2)];
    int id2 = ids[s.substr(1, 2)];
    g[id1].insert(id2);
    outdeg[id1]++;
    indeg[id2]++;
  }
  int odds = 0;
  int start = 0;
  int cnt_start = 0, cnt_end = 0;
  for (int i = 0; i < id; i++) {
    if (abs(indeg[i] - outdeg[i]) >= 2) no();
    if (indeg[i] + 1 == outdeg[i]) {
      start = i;
      cnt_start++;
    } else if (indeg[i] == outdeg[i] + 1) {
      cnt_end++;
    }
  }
  if ((cnt_start == 1 && cnt_end == 1) || (cnt_start == 0 && cnt_end == 0)) {
    vector<int> ans;
    int cur_vertex = start;
    stack<int> st;
    while (true) {
      if (g[cur_vertex].empty()) {
        ans.push_back(cur_vertex);
        if (st.empty()) break;
        cur_vertex = st.top();
        st.pop();
      } else {
        st.push(cur_vertex);
        int v = *g[cur_vertex].begin();
        g[cur_vertex].erase(g[cur_vertex].begin());
        cur_vertex = v;
      }
    }
    reverse(ans.begin(), ans.end());
    string result = "";
    result += rev[ans[0]][0];
    for (int i = 0; i < ans.size(); i++) result += rev[ans[i]][1];
    if (result.length() != n + 2) no();
    cout << "YES" << endl;
    cout << result << endl;
  } else {
    cout << "NO" << endl;
    return 0;
  }
  return 0;
}
