#include <bits/stdc++.h> using namespace std; using ll = long long; using vi = vector<int>; using vvi = vector<vi>; using pii = pair<int ,int>; using vpii = vector<pair<int, int>>; using pipii = pair<int, pii>; void solve() { int n; cin >> n; vector<string> s(n); string t; for(int i = 0; i < n; i++) { cin >> s[i]; } cin >> t; vi ptr(n); vvi nxt(26); for(int i = 0; i < n; i++) { nxt[s[i][0]-'a'].push_back(i); } int p = 0; auto upd_all = [&](int idx) { vi v = nxt[idx]; nxt[idx].clear(); for(int i : v) { ptr[i]++; if(ptr[i] < s[i].size()) { // cerr << s[i][ptr[i]]-'a' << endl; nxt[s[i][ptr[i]]-'a'].push_back(i); } } }; string ans = ""; while(true) { bool done = true; for(int c = 0; c < 26; c++) { if(c == t[p]-'a') continue; if(nxt[c].empty()) continue; // cerr << "add " << c << endl; ans += ((char)('a'+c)); upd_all(c); done = false; } if(done && !nxt[t[p]-'a'].empty()) { done = false; // cerr << "add " << t[p]-'a' << endl; ans += (t[p]); upd_all(t[p]-'a'); p++; if(p >= t.size()) { cout << "NO" << endl; return; } } if(done) break; } cout << "YES" << endl; cout << ans << endl; return; } int main() { ios::sync_with_stdio(false); cin.tie(0); solve(); return 0; }