/** GOKURI */ #include #include #include #include #include #include #include #include #include #include using namespace std; #define FNAME "match.txt" #define cin fin typedef vector > matrix; void solve(matrix& men, matrix& women) { swap(men, women); vector partner_of_woman(women.size(), - 1); for (int im = 0; im < men.size(); ++im) { //cout << im << endl; int M = im; int ic = 0; for (; ic < men[M].size(); ++ic) { //cout << "* " << ic << endl; int W = men[M][ic]; int P = partner_of_woman[W]; if (P == -1) { partner_of_woman[W] = M; break; } else { bool m_is_first = true; for (int i = 0;i < women[W].size(); ++i) { if (women[W][i] == M) { break; } else if (women[W][i] == P) { m_is_first = false; break; } } if (m_is_first) { partner_of_woman[W] = M; M = P; ic = find(men[M].begin(), men[M].end(), W) - men[M].begin(); } } } } for (int i = 0; i < women.size(); ++i) { if (i) { cout << ' '; } cout << (partner_of_woman[i] + 1); } cout << endl; } int main() { ifstream fin(FNAME); if(!fin) return -1; int T; cin >> T; while (T--) { int N; cin >> N; vector > men(N, vector(N)); vector > women(N, vector(N)); for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { cin >> men[i][j]; men[i][j]--; } } for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { cin >> women[i][j]; women[i][j]--; } } solve(men, women); } return 0; }