#include <bits/stdc++.h> using namespace std; #define int long long #define F first #define S second string ans = ""; void upd(vector<int>& inds, vector<string>& v, vector<int>& lft, char c){ for (int j = 0; j < (int)lft.size(); j++) { int st = lft[j]; while (inds[st] < (int)v[st].size() && v[st][inds[st]] != c) { ans += v[st][inds[st]]; inds[st]++; } if (inds[st] == (int)v[st].size()) { swap(lft[j], lft[(int)lft.size() - 1]); lft.pop_back(); j--; } } } signed main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<string> v(n); for (string& s : v) cin >> s; string t; cin >> t; vector<int> inds(n, 0); vector<int> lft(n); for (int i = 0; i < n; i++) lft[i] = i; for (int i = 0; i < (int)t.size(); i++) { upd(inds, v, lft, t[i]); if (lft.empty()) break; ans += t[i]; for (int j = 0; j < (int)lft.size(); j++) { int st = lft[j]; if (inds[st] < (int)v[st].size() && v[st][inds[st]] == t[i]) { ans += v[st][inds[st]]; inds[st]++; } if (inds[st] == (int)v[st].size()) { swap(lft[j], lft[(int)lft.size() - 1]); lft.pop_back(); j--; } } if (i == (int)t.size() - 1) { cout << "NO\n"; return 0; } } cout << "YES\n"; cout << ans << "\n"; }