#include <iostream>
#include <vector>
#include <string>
#include <set>
#include <algorithm>

using namespace std;

const int ENG = 26;

int getind(char c) {
    return c - 'a';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;
    vector<string> s(n);
    for (int i = 0; i < n; i++) {
        cin >> s[i];
        reverse(s[i].begin(), s[i].end());
    }
    string t;
    cin >> t;
    reverse(t.begin(), t.end());
    string ans = "";
    vector<vector<int>> cur(ENG);
    int totlen = 0;
    for (int i = 0; i < n; i++) {
        cur[getind(s[i].back())].push_back(i);
        totlen += s[i].size();
    }
    while (totlen > 0) {
        for (int i = 0; i < ENG; i++) {
            if (i == getind(t.back())) continue;
            while (!cur[i].empty()) {
                int cursi = cur[i].back();
                cur[i].pop_back();
                while (!s[cursi].empty() && s[cursi].back() != t.back()) {
                    ans += s[cursi].back();
                    s[cursi].pop_back();
                    totlen--;
                }
                if (!s[cursi].empty()) {
                    cur[getind(s[cursi].back())].push_back(cursi);
                }
            }
        }
        if (totlen == 0) break;
        ans += t.back();
        vector<int> cursis = cur[getind(t.back())];
        cur[getind(t.back())].clear();
        for (int& si : cursis) {
            s[si].pop_back();
            totlen--;
            if (!s[si].empty()) {
                cur[getind(s[si].back())].push_back(si);
            }
        }
        t.pop_back();
        if (t.empty()) {
            cout << "NO" << endl;
            return 0;
        }
    }
    cout << "YES" << endl;
    cout << ans << endl;


    return 0;
}