#include using namespace std; const int MAXN = 105; vector G[MAXN]; vector used, L, R; bool match(int node) { if(used[node]) return false; used[node] = true; for(auto temp : G[node]) { if(R[temp] == -1) { R[temp] = node; L[node] = temp; return true; } } for(auto temp : G[node]) { if(match(R[temp])) { R[temp] = node; L[node] = temp; return true; } } return false; } int main() { //ifstream cin("c.in"); int n, k; cin >> n >> k; vector name(n); for(int i = 0; i < n; ++i) { cin >> name[i]; int streak = 0; int last = 0; for(int j = 0; j < k; ++j) { int val; cin >> val; if(val > last) { streak++; if(streak >= 3) { G[i].push_back(j); } } else { streak = 1; } last = val; } } L = vector (n, -1), R = vector (k, -1); bool change = true; do { change = false; used = vector (n, 0); for(int i = 0; i < n; ++i) { if(L[i] == -1 and match(i)) { change = true; } } } while(change); for(int i = 0; i < k; ++i) { if(R[i] == -1) { cout << "none\n"; } else { cout << name[R[i]] << "\n"; } } }