#include using namespace std; const int MOD = 1000000007; const int MaxN = (int)1e5 + 10; const int INF = (int)1e9; long long readInt(long long l,long long r,char endd){ long long x=0; int cnt=0; int fi=-1; bool is_neg=false; while(true){ char g=getchar(); if(g=='-'){ assert(fi==-1); is_neg=true; continue; } if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(fi!=0 || cnt==1); assert(fi!=0 || is_neg==false); assert(!(cnt>19 || ( cnt==19 && fi>1) )); } else if(g==endd){ if(is_neg){ x= -x; } assert(l<=x && x<=r); return x; } else { assert(false); } } } string readString(int l,int r,char endd){ string ret=""; int cnt=0; while(true){ char g=getchar(); assert(g!=-1); if(g==endd){ break; } cnt++; ret+=g; } assert(l<=cnt && cnt<=r); return ret; } long long readIntSp(long long l,long long r){ return readInt(l,r,' '); } long long readIntLn(long long l,long long r){ return readInt(l,r,'\n'); } string readStringLn(int l,int r){ return readString(l,r,'\n'); } string readStringSp(int l,int r){ return readString(l,r,' '); } int a[100002][32]; int b[100002][32]; vector < int > f[32]; void solve() { int p = readIntSp(1, 100000); int s = readIntLn(2, 30); for (int i = 1; i <= p; ++i) { for (int j = 1; j <= s; ++j) { if (j < s) { a[i][j] = readIntSp(1, 100); } else { a[i][j] = readIntLn(1, 100); } } for (int j = 1; j <= s; ++j) { if (j < s) { b[i][j] = readIntSp(1, 1000); } else { b[i][j] = readIntLn(1, 1000); } } for (int j = 1; j <= s; ++j) { for (int k = 1; k + 1 <= s; ++k) { if (a[i][k] < a[i][k + 1]) { swap(a[i][k], a[i][k + 1]); swap(b[i][k], b[i][k + 1]); } } } int cnt = 0; for (int k = 1; k + 1 <= s; ++k) { assert (a[i][k] != a[i][k + 1]); if (b[i][k] < b[i][k + 1]) { ++cnt; } } f[cnt].push_back(i); } vector < int > res; for (int i = 0; i <= 30; ++i) { for (auto &it : f[i]) { res.push_back(it); } } for (auto it : res) { cout << it << "\n"; } } int main() { // freopen("input.txt", "r", stdin); solve(); assert (getchar() == EOF); return 0; }