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