#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; }