// Maximum-TNT #include #include #include #include #include #include #include #include #include using namespace std; #define cin fin const int BUFSIZE = 1024; ifstream fin("match.txt"); vector > g_male_kouho, g_female_kouho; vector g_match; vector g_koukando; int g_n; void Input() { int n; cin >> n; g_n=n; g_male_kouho.assign(n, vector(n)); g_female_kouho.assign(n, vector(n)); g_match.assign(g_n,-1); g_koukando.assign(g_n,10000); for(int i=0;i> g_male_kouho[i][j]; } } for(int i=0;i> g_female_kouho[i][j]; } } } int GetKoukando(int w,int m) { return (int)(find(g_female_kouho[w].begin(),g_female_kouho[w].end(),m+1)-g_female_kouho[w].begin()); } int Moushikomi(int m) { int moto_konyakusha=-1; for(int j = 0 ; j < g_n ; j++) { int w = g_male_kouho[m][j]; int womans_koukando = GetKoukando(w-1,m); if(g_koukando[w-1] > womans_koukando) { g_koukando[w-1] = womans_koukando; moto_konyakusha = g_match[w-1]; g_match[w-1] = m; break; } } return moto_konyakusha; } void Solve() { for(int i = 0 ; i < g_n ; i++) { int tmp=i; while((tmp = Moushikomi(tmp)) != -1); } } int main() { int t; cin >> t; while(t--) { Input(); Solve(); vector ans(g_n,0); for(int i = 0 ; i < g_n ; i++) { ans[g_match[i]] = i+1; } for(int i = 0 ; i < g_n ; i++) { if(i)cout << ' '; cout << ans[i]; } cout << endl; } return 0; }