#include <bits/stdc++.h> #define len(x) (int) (x).size() using namespace std; const int N = 2e5 + 1; int n, id[N]; string t[N], p; set <int> ava[26]; void step(int c) { // cout << " step: " << c << "\n"; vector <pair <int, int>> add; for (int i: ava[c]) { int j = id[i] + 1; if (j == len(t[i])) { continue; } id[i]++; // cout << "add id: " << i << '\n'; add.push_back({i, t[i][j] - 'a'}); } // cout << "ids: "; // for(int i = 0; i < n; i++) cout << id[i] << ' '; // cout << '\n'; ava[c].clear(); for (auto [i, c]: add) { ava[c].insert(i); } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n; for (int i = 0; i < n; ++i) { cin >> t[i]; ava[t[i][0] - 'a'].insert(i); } int cur = 0; cin >> p; string ans = ""; for (int i = 0; i < N; ++i) { int bad = p[cur] - 'a'; // cout << i << " " << cur << ":\n"; bool ok = false, allempty = true; for (int c = 0; c < 26; ++c) { allempty &= ava[c].empty(); // cout << ('a' + c) << " => " << ava[c].size() << "\n"; } if (allempty) { break; } // cout << "bad: " << (bad + 'a') << "\n"; for (int c = 0; c < 26; ++c) { if (bad == c || ava[c].empty()) { continue; } ans += c + 'a'; step(c); // cout << "added: " << (char)(c + 'a') << '\n'; ok = true; break; } if (!ok) { ans += bad + 'a'; step(bad); cur++; if (cur == len(p)) { cout << "NO\n"; return 0; } } } cout << "YES\n"; cout << ans << "\n"; }