Exemplo n.º 1
0
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');
	}
}