/*
Zenit CK 2011/2012, uloha g)
Riesenie by Zemco
Skusame vsetky moznosti skupiny ludi. Danu skupinu vyskusame,
ci kazdy schopnost vie niekto a ak ano, zistime
ci nie je lacnejsia/skor v abecede ako ta, ktoru pozname doteraz.
Zo zadania mame predpoklad, ze nejake riesenie existuje.
Cas riesenia: 2^N * ( dake polynomialne drobne typu N*(logN + MlogM) )
*/
#include <iostream>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
typedef vector<string> VS;
#define FOR(i,N) for(int i=0;i<(int)N;i++)
#define PB push_back
int N,M;
set<string> current,best,kandidat;
//vstup. pre dane meno si pamatame vo vektore nazvy jeho schopnosti
map<string,VS> MP;
VS mena;
int main(){
cin >> M;
string s;
FOR(i,M) cin >> s;
cin >> N;
FOR(i,N){
int x;
cin >> x >> s;
mena.PB( s );
VS schopnost;
FOR(i,x){
string sch;
cin >> sch;
schopnost.PB(sch);
}
MP[s] = schopnost;
}
//dummy riesenie, horsie od vsetkeho
FOR(i,N+1) best.insert( string(i+3,'z') );
//skusime skupinu ludi danu binarnym zapisom cisla 'i'
FOR(i,(1<<N)){
current.clear();
kandidat.clear();
//zrekonstruujeme set skillov, ktory ma dana mnozina ludi
FOR(j,N) if (i & (1<<j)){
kandidat.insert( mena[j] );
FOR(k,MP[mena[j]].size()) current.insert( MP[mena[j]][k] );
}
//mnozina je vyhovujuca, ak tam je M roznych skillov
if ( (int)current.size() == M ){
if (kandidat.size() > best.size()) continue;
//vyuzijeme to, ze v pripade rovnosti velkosti mnozin robi comparator '<' presne to co chceme - porovnava lexikograficky
if (kandidat.size() < best.size()) best = kandidat;
else best = kandidat < best ? kandidat : best;
}
}
for(set<string>::iterator it = best.begin(); it != best.end(); it++){
if (it != best.begin()) cout << " ";
cout << *it;
}
cout << endl;
return 0;
}
LyoKICBaZW5pdCBDSyAyMDExLzIwMTIsIHVsb2hhIGcpCiAgUmllc2VuaWUgYnkgWmVtY28KCiAgU2t1c2FtZSB2c2V0a3kgbW96bm9zdGkgc2t1cGlueSBsdWRpLiBEYW51IHNrdXBpbnUgdnlza3VzYW1lLAogIGNpIGthemR5IHNjaG9wbm9zdCB2aWUgbmlla3RvIGEgYWsgYW5vLCB6aXN0aW1lCiAgY2kgbmllIGplIGxhY25lanNpYS9za29yIHYgYWJlY2VkZSBha28gdGEsIGt0b3J1IHBvem5hbWUgZG90ZXJhei4KCiAgWm8gemFkYW5pYSBtYW1lIHByZWRwb2tsYWQsIHplIG5lamFrZSByaWVzZW5pZSBleGlzdHVqZS4KICBDYXMgcmllc2VuaWE6IDJeTiAqICggZGFrZSBwb2x5bm9taWFsbmUgZHJvYm5lIHR5cHUgTioobG9nTiArIE1sb2dNKSApCiAgICovCgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIHZlY3RvcjxzdHJpbmc+IFZTOwoKI2RlZmluZSBGT1IoaSxOKSBmb3IoaW50IGk9MDtpPChpbnQpTjtpKyspCiNkZWZpbmUgUEIgcHVzaF9iYWNrCgppbnQgTixNOwpzZXQ8c3RyaW5nPiBjdXJyZW50LGJlc3Qsa2FuZGlkYXQ7Ci8vdnN0dXAuIHByZSBkYW5lIG1lbm8gc2kgcGFtYXRhbWUgdm8gdmVrdG9yZSBuYXp2eSBqZWhvIHNjaG9wbm9zdGkKbWFwPHN0cmluZyxWUz4gTVA7ClZTIG1lbmE7CgppbnQgbWFpbigpewogIGNpbiA+PiBNOwogIHN0cmluZyBzOwogIEZPUihpLE0pIGNpbiA+PiBzOwogIGNpbiA+PiBOOwogIEZPUihpLE4pewogICAgaW50IHg7CiAgICBjaW4gPj4geCA+PiBzOwogICAgbWVuYS5QQiggcyApOwogICAgVlMgc2Nob3Bub3N0OwogICAgRk9SKGkseCl7CiAgICAgIHN0cmluZyBzY2g7CiAgICAgIGNpbiA+PiBzY2g7CiAgICAgIHNjaG9wbm9zdC5QQihzY2gpOwogICAgfQogICAgTVBbc10gPSBzY2hvcG5vc3Q7CiAgfQoKICAvL2R1bW15IHJpZXNlbmllLCBob3JzaWUgb2QgdnNldGtlaG8KICBGT1IoaSxOKzEpIGJlc3QuaW5zZXJ0KCBzdHJpbmcoaSszLCd6JykgKTsKCiAgLy9za3VzaW1lIHNrdXBpbnUgbHVkaSBkYW51IGJpbmFybnltIHphcGlzb20gY2lzbGEgJ2knCiAgRk9SKGksKDE8PE4pKXsKICAgIGN1cnJlbnQuY2xlYXIoKTsKICAgIGthbmRpZGF0LmNsZWFyKCk7CiAgICAvL3pyZWtvbnN0cnV1amVtZSBzZXQgc2tpbGxvdiwga3RvcnkgbWEgZGFuYSBtbm96aW5hIGx1ZGkKICAgIEZPUihqLE4pIGlmIChpICYgKDE8PGopKXsKICAgICAga2FuZGlkYXQuaW5zZXJ0KCBtZW5hW2pdICk7CiAgICAgIEZPUihrLE1QW21lbmFbal1dLnNpemUoKSkgY3VycmVudC5pbnNlcnQoIE1QW21lbmFbal1dW2tdICk7CiAgICB9CiAgICAvL21ub3ppbmEgamUgdnlob3Z1anVjYSwgYWsgdGFtIGplIE0gcm96bnljaCBza2lsbG92CiAgICBpZiAoIChpbnQpY3VycmVudC5zaXplKCkgPT0gTSApewogICAgICBpZiAoa2FuZGlkYXQuc2l6ZSgpID4gYmVzdC5zaXplKCkpIGNvbnRpbnVlOwogICAgICAvL3Z5dXppamVtZSB0bywgemUgdiBwcmlwYWRlIHJvdm5vc3RpIHZlbGtvc3RpIG1ub3ppbiByb2JpIGNvbXBhcmF0b3IgJzwnIHByZXNuZSB0byBjbyBjaGNlbWUgLSBwb3Jvdm5hdmEgbGV4aWtvZ3JhZmlja3kKICAgICAgaWYgKGthbmRpZGF0LnNpemUoKSA8IGJlc3Quc2l6ZSgpKSBiZXN0ID0ga2FuZGlkYXQ7CiAgICAgIGVsc2UgYmVzdCA9IGthbmRpZGF0IDwgYmVzdCA/IGthbmRpZGF0IDogYmVzdDsKICAgIH0KICB9CgogIGZvcihzZXQ8c3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBiZXN0LmJlZ2luKCk7IGl0ICE9IGJlc3QuZW5kKCk7IGl0KyspewogICAgaWYgKGl0ICE9IGJlc3QuYmVnaW4oKSkgY291dCA8PCAiICI7CiAgICBjb3V0IDw8ICppdDsKICB9CiAgY291dCA8PCBlbmRsOwogIHJldHVybiAwOwp9