#include #include #include #include using namespace std; using ll=long long; #include using mint=atcoder::modint998244353; ostream& operator<<(ostream& os,mint& x){ os<>(istream& is,mint& x){ int t; is>>t; x=t; return is; } template ostream& operator<<(ostream& os,const pair& p); template istream& operator>>(istream& is,pair& p); template ostream& operator<<(ostream& os,const array& arr); template istream& operator>>(istream& is,array& arr); template ostream& operator<<(ostream& os,const vector& vec); template istream& operator>>(istream& is,vector& vec); template ostream& operator<<(ostream& os,pair& p){ os< istream& operator>>(istream& is,pair& p){ is>>p.first>>p.second; return is; } template ostream& operator<<(ostream& os,array& arr){ for(int i=0;i istream& operator>>(istream& is,array& arr){ for(int i=0;i>arr[i]; return is; } template ostream& operator<<(ostream& os,vector& vec){ for(int i=0;i istream& operator>>(istream& is,vector& vec){ for(int i=0;i>vec[i]; return is; } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int n,m; cin>>n>>m; vector s(n); for(int i=0;i>s[i]; array e; for(int i=0;i<26;i++)e[i]=-1; vector> trie(1,e); vector cnt(1,0); vector cnt2(1,0); for(int i=0;ivoid{ if(d==s[i].size()){ cnt2[v]++; cnt[v]++; return; } int nxt=s[i][d]-'a'; if(trie[v][nxt]==-1){ trie[v][nxt]=trie.size(); cnt.push_back(0); cnt2.push_back(0); trie.push_back(e); } cnt[v]-=cnt[trie[v][nxt]]; dfs(dfs,trie[v][nxt],d+1); cnt[v]+=cnt[trie[v][nxt]]; }; dfs(dfs,0,0); } string cur=""; int sum=0; auto dfs=[&](auto dfs,int v,int d)->bool{ if(sum+cnt[v]+m<=n){ return true; } for(int i=0;i<26;i++){ if(trie[v][i]==-1){ if(sum+cnt2[v]+m<=n){ cur+=('a'+i); return true; } }else{ sum+=cnt2[v]; cur+=('a'+i); if(dfs(dfs,trie[v][i],d+1))return true; else{ cur.pop_back(); sum-=cnt2[v]; } } } return false; }; if(dfs(dfs,0,0))cout<<"Yes"<