#include #include #include #include #include using namespace std; #define NMAX 105 string name[NMAX]; char viz[NMAX]; vector bipGraph[NMAX]; int n, days, subs[NMAX], rightt[NMAX], leftt[NMAX]; int cupleaza(int node) { if(viz[node]) return 0; viz[node] = 1; int lim = bipGraph[node].size(); for(int i = 0; i < lim; i++) { int neigh = bipGraph[node][i]; if(!rightt[neigh]) { leftt[node] = neigh; rightt[neigh] = node; return 1; } } for(int i = 0; i < lim; i++) { int neigh = bipGraph[node][i]; if(cupleaza(rightt[neigh])) { leftt[node] = neigh; rightt[neigh] = node; return 1; } } return 0; } int main () { // freopen("a.in","r",stdin); cin >> n >> days; for(int i = 1; i <= n; i++) { cin >> name[i]; for(int j = 1; j <= days; j++) { cin >> subs[j]; if(j > 2 && subs[j - 1] > subs[j - 2] && subs[j] > subs[j - 1]) bipGraph[i].push_back(j); } } int ok = 1; while(ok) { ok = 0; for(int i = 1; i <= n; i++) { if(!leftt[i] && cupleaza(i)) { ok = 1; } } memset(viz, 0, sizeof(viz)); } for(int i = 1; i <= days; i++) { if(!rightt[i]) cout << "none" << "\n"; else cout << name[rightt[i]] << "\n"; } return 0; }