int main() { int cs; scanf("%d", &cs); while(cs--) { int n; IDGen<char> mid, wid; char let[64]; scanf("%d", &n); for(int i = 0; i < n; ++i) { scanf("%s", let); mid.getId(let[0]); } for(int i = 0; i < n; ++i) { scanf("%s", let); wid.getId(let[0]); } StableMarriage sm; sm.init(n); for(int i = 0; i < n; ++i) { scanf("%s", let); int m = mid.getId(let[0]); for(int j = 2; let[j]; ++j) { int w = wid.getId(let[j]); sm.add('m', m, j - 2, w); } } for(int i = 0; i < n; ++i) { scanf("%s", let); int w = wid.getId(let[0]); for(int j = 2; let[j]; ++j) { int m = mid.getId(let[j]); sm.add('w', w, j - 2, m); } } sm.stableMatch(); vector<pair<char, char> > vp; for(int i = 0; i < n; ++i) { char m, w; m = mid.getElem(i); w = wid.getElem(sm.getMatch(i)); vp.push_back(make_pair(m, w)); } sort(vp.begin(), vp.end()); for(int i = 0; i < vp.size(); ++i) { printf("%c %c\n", vp[i].first, vp[i].second); } if(cs != 0) putchar('\n'); } }