#include using namespace std; using ll = long long; #define rep(i, n) for (int i = 0; i < (int)(n); i++) struct Trie { struct Node { vector next, accept; int c, common; Node(int c_) : c(c_), common(0) { next.assign(26, -1); } }; vector nodes; int root; Trie() : root(0) { nodes.push_back(Node(root)); } void insert(string s) { int id = 0; for (char c : s) { int num = c - 'a'; int &nid = nodes[id].next[num]; if (nid == -1) { nid = nodes.size(); nodes.push_back(Node(num)); } nodes[id].common++; id = nid; } nodes[id].common++; nodes[id].accept.push_back(nodes[0].common); } bool search(string s) { int id = 0; for (char c : s) { int num = c - 'a'; int nid = nodes[id].next[num]; if (nid == -1) { return false; } id = nid; } return nodes[id].accept.size() > 0; } string ans; string cur; void f(int id, int k) { if (ans.empty() && nodes[id].common <= k) { ans = cur; } int d = nodes[id].accept.size(); rep(i, 26) { cur.push_back(i + 'a'); if (nodes[id].next[i] != -1) { f(nodes[id].next[i], k - d); } else { if (ans.empty() && k - d >= 0) { ans = cur; } } cur.pop_back(); } } }; int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); int n, k; cin >> n >> k; Trie t; rep(i, n) { string s; cin >> s; t.insert(s); } t.f(0, n - k); string ans = t.ans; if (ans.empty()) { cout << "No" << endl; } else { cout << "Yes" << endl; cout << ans << endl; } return 0; }