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