#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i = (a); i < (b); i++) #define all(x) begin(x), end(x) #define sz(x) int((x).size()) using ll = long long; using pii = pair<int, int>; using vi = vector<int>; #ifdef LOCAL auto operator<<(auto& o, auto x) -> decltype(x.first, o); auto operator<<(auto& o, auto x) -> decltype(x.end(), o) { o << "{"; for (int i = 0; auto y : x) o << ", " + !i++ * 2 << y; return o << "}"; } auto operator<<(auto& o, auto x) -> decltype(x.first, o) { return o << "(" << x.first << ", " << x.second << ")"; } void __print(auto... x) { ((cerr << x << " "), ...) << endl; } #define debug(x...) __print("[" #x "]:", x) #else #define debug(...) 2137 #endif const int N = 200200; int n; string s[N]; queue<pii> q[26]; string t; int main() { cin.tie(0)->sync_with_stdio(0); cin >> n; rep(i, 0, n) cin >> s[i]; cin >> t; rep(i, 0, n) q[s[i][0] - 'a'].push({i, 0}); int x = 0; string odp; while (true) { int kto = -1; bool czy = 0; rep(i, 0, 26) if (sz(q[i])) { czy = 1; if (i != t[x] - 'a') { kto = i; break; } } if (!czy) break; if (kto == -1) { kto = t[x] - 'a'; x++; } if (x == sz(t)) { cout << "NO\n"; return 0; } odp.push_back(kto + 'a'); int ile = sz(q[kto]); rep(r, 0, ile) { auto [i, j] = q[kto].front(); q[kto].pop(); if (j + 1 < sz(s[i])) { q[s[i][j + 1] - 'a'].push({i, j + 1}); } } } cout << "YES\n" << odp << '\n'; }