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