#include #include #include #include #include using namespace std; const int inf = numeric_limits::max()/2; void fulk(int n, int k, vector> &cap, vector> adj){ int st=0; int nr = n+k+2; int dest=n+k+1; bool go=1; while(go){ go=false; //bfs from st to dest vector parent(nr,-1); vector vis(nr,0); queue q; q.push(st); vis[st]=1; while(!q.empty()){ int v = q.front(); q.pop(); for(auto ng:adj[v]){ if(!vis[ng] && cap[v][ng]){ q.push(ng); parent[ng]=v; if(ng==dest) goto cont; } } } continue; cont: go=true; int c=dest; while(c!=0){ cap[c][parent[c]]++; cap[parent[c]][c]--; c=parent[c]; } } } int main() { int n, k; cin>>n>>k; vector< string > names(n+1); vector< vector > cap((n+k+2), vector(n+k+2,0)); vector< vector > adj(n+k+2); for(int i=1;i<=n;++i) adj[i].reserve(k); for(int i=1;i<=n;++i){ adj[0].push_back(i); cap[0][i]=1; } for(int i=n+1; i>names[c]; int pp = inf, p = inf; for(int d=1;d>x; if(pp

res(k+1,-1); fulk(n,k,cap,adj); for(int c=1;c<=n;++c){ for(auto i : adj[c]){ if(cap[c][i]==0) res[i-n]=c; } } for(int i=1;i<=k;++i){ if(res[i]==-1) cout<<"none"<<'\n'; else cout<