/* coder: ACboy date: 2010-3-6 */ #include <iostream> #include <algorithm> #include <string> #include <vector> #include <map> using namespace std; struct cmp { bool operator () (const string a, const string b) { return a < b; } }; int mySort(int * data, int n, int moves[]) { int count = 0; while (1) { int i; int curMax = -1; int reverMax = -1; int move = -1; for (i = 0; i < n; i++) { if (data[i] > curMax) { curMax = data[i]; } else if (data[i] < curMax && data[i] > reverMax) { reverMax = data[i]; move = i; } } if (reverMax < 0) break; for (i = move; i > 0; i--) { data[i] = data[i - 1]; } data[0] =reverMax; moves[count++] = reverMax; } return count; } int main() { int n; freopen("10152.txt", "r", stdin); cin >> n; while (n--) { int i; int k; vector<string> toBeSorted(210); vector<string> sorted(210); scanf("%d/n", &k); for (i = 0; i < k; i++) { getline(cin, toBeSorted[i]); } map<string, int, cmp> mySorted; for (i = 0; i < k; i++) { getline(cin, sorted[i]); mySorted.insert(make_pair(sorted[i], i)); } int data[210]; for (i = 0; i < k; i++) { data[i] = mySorted[toBeSorted[i]]; } int moves[210]; int count = mySort(data, k, moves); for (i = 0; i < count; i++) { cout << sorted[moves[i]] << endl; } cout << endl; } return 0; }