#include <bits/stdc++.h>

using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  vector<string> s(n);
  for (int i = 0; i < n; i++) {
    cin >> s[i];
  }
  string t;
  cin >> t;
  const int A = 26;
  vector<vector<int>> f(A);
  vector<int> ptr(n);
  for (int i = 0; i < n; i++) {
    int c = int(s[i][0] - 'a');
    f[c].push_back(i);
  }
  vector<int> sz(n);
  for (int i = 0; i < n; i++) {
    sz[i] = int(s[i].size());
  }
  string res = "";
  int nxt = 0;
  while (true) {
    bool has = false;
    for (int i = 0; i < A; i++) {
      if (!f[i].empty()) {
        has = true;
      }
    }
    if (!has) {
      break;
    }
    int c = int(t[nxt] - 'a');
    vector<int> ids;
    int ch = -1;
    for (int i = 0; i < A; i++) {
      if (i == c || f[i].empty()) {
        continue;
      }
      ids = f[i];
      ch = i;
      break;
    }
    if (ch != -1) {
      res += char('a' + ch);
      f[ch].clear();
      for (int i : ids) {
        ptr[i] += 1;
        if (ptr[i] < sz[i]) {
          int c = int(s[i][ptr[i]] - 'a');
          f[c].push_back(i);
        }
      }
      continue;
    }
    ch = c;
    ids = f[ch];
    res += char('a' + ch);
    f[ch].clear();
    for (int i : ids) {
      ptr[i] += 1;
      if (ptr[i] < sz[i]) {
        int c = int(s[i][ptr[i]] - 'a');
        f[c].push_back(i);
      }
    }
    nxt += 1;
    if (nxt == int(t.size())) {
      cout << "NO" << '\n';
      return 0;
    }
  }
  cout << "YES" << '\n';
  cout << res << '\n';
  return 0;
}