#include <bits/stdc++.h>
using namespace std;
using str = string;
struct Man {
str name, fam;
int day, mth, year, mark;
vector<str> lst;
bool operator<(Man& other) {
if (mark != other.mark) return mark > other.mark;
if (year != other.year) return year < other.year;
if (mth != other.mth) return mth < other.mth;
if (day != other.day) return day < other.day;
if (fam != other.fam) return fam < other.fam;
return name < other.name;
}
};
struct Univer {
str name;
int c;
vector<Man> lst;
};
int main() {
int n;
cin >> n;
map<str, Univer> dct;
while (n--) {
Univer u;
cin >> u.name >> u.c;
dct[u.name] = u;
}
int m;
cin >> m;
vector<Man> a;
while (m--) {
Man s;
int x;
cin >> s.name >> s.fam >> s.day >> s.mth >> s.year >> s.mark >> x;
while (x--) {
str univ;
cin >> univ;
s.lst.push_back(univ);
}
a.push_back(s);
}
sort(a.begin(), a.end());
for (auto stud : a) {
for (auto i : stud.lst) {
auto p = dct.find(i);
if (p != dct.end() && p->second.lst.size() < p->second.c) {
p->second.lst.push_back(stud);
break;
}
}
}
for (auto [nm, un] : dct) {
sort(un.lst.begin(), un.lst.end(), [](Man& a, Man& b) {
if (a.fam != b.fam) return a.fam < b.fam;
if (a.name != b.name) return a.name < b.name;
if (a.year != b.year) return a.year < b.year;
if (a.mth != b.mth) return a.mth < b.mth;
return a.day < b.day;
});
cout << nm;
for (auto i : un.lst) {cout << " " << i.name << ' ' << i.fam;}
cout << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIHN0ciA9IHN0cmluZzsKc3RydWN0IE1hbiB7CiAgICBzdHIgbmFtZSwgZmFtOwogICAgaW50IGRheSwgbXRoLCB5ZWFyLCBtYXJrOwogICAgdmVjdG9yPHN0cj4gbHN0OwogICAgYm9vbCBvcGVyYXRvcjwoTWFuJiBvdGhlcikgewogICAgICAgIGlmIChtYXJrICE9IG90aGVyLm1hcmspIHJldHVybiBtYXJrID4gb3RoZXIubWFyazsKICAgICAgICBpZiAoeWVhciAhPSBvdGhlci55ZWFyKSByZXR1cm4geWVhciA8IG90aGVyLnllYXI7CiAgICAgICAgaWYgKG10aCAhPSBvdGhlci5tdGgpIHJldHVybiBtdGggPCBvdGhlci5tdGg7CiAgICAgICAgaWYgKGRheSAhPSBvdGhlci5kYXkpIHJldHVybiBkYXkgPCBvdGhlci5kYXk7CiAgICAgICAgaWYgKGZhbSAhPSBvdGhlci5mYW0pIHJldHVybiBmYW0gPCBvdGhlci5mYW07CiAgICAgICAgcmV0dXJuIG5hbWUgPCBvdGhlci5uYW1lOwogICAgfQp9OwpzdHJ1Y3QgVW5pdmVyIHsKICAgIHN0ciBuYW1lOwogICAgaW50IGM7CiAgICB2ZWN0b3I8TWFuPiBsc3Q7Cn07CmludCBtYWluKCkgewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKICAgIG1hcDxzdHIsIFVuaXZlcj4gZGN0OwogICAgd2hpbGUgKG4tLSkgewogICAgICAgIFVuaXZlciB1OwogICAgICAgIGNpbiA+PiB1Lm5hbWUgPj4gdS5jOwogICAgICAgIGRjdFt1Lm5hbWVdID0gdTsKICAgIH0KICAgIGludCBtOwogICAgY2luID4+IG07CiAgICB2ZWN0b3I8TWFuPiBhOwogICAgd2hpbGUgKG0tLSkgewogICAgICAgIE1hbiBzOwogICAgICAgIGludCB4OwogICAgICAgIGNpbiA+PiBzLm5hbWUgPj4gcy5mYW0gPj4gcy5kYXkgPj4gcy5tdGggPj4gcy55ZWFyID4+IHMubWFyayA+PiB4OwogICAgICAgIHdoaWxlICh4LS0pIHsKICAgICAgICAgICAgc3RyIHVuaXY7CiAgICAgICAgICAgIGNpbiA+PiB1bml2OwogICAgICAgICAgICBzLmxzdC5wdXNoX2JhY2sodW5pdik7CiAgICAgICAgfQogICAgICAgIGEucHVzaF9iYWNrKHMpOwogICAgfQogICAgc29ydChhLmJlZ2luKCksIGEuZW5kKCkpOwogICAgZm9yIChhdXRvIHN0dWQgOiBhKSB7CiAgICAgICAgZm9yIChhdXRvIGkgOiBzdHVkLmxzdCkgewogICAgICAgICAgICBhdXRvIHAgPSBkY3QuZmluZChpKTsKICAgICAgICAgICAgaWYgKHAgIT0gZGN0LmVuZCgpICYmIHAtPnNlY29uZC5sc3Quc2l6ZSgpIDwgcC0+c2Vjb25kLmMpIHsKICAgICAgICAgICAgICAgIHAtPnNlY29uZC5sc3QucHVzaF9iYWNrKHN0dWQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmb3IgKGF1dG8gW25tLCB1bl0gOiBkY3QpIHsKICAgICAgICBzb3J0KHVuLmxzdC5iZWdpbigpLCB1bi5sc3QuZW5kKCksIFtdKE1hbiYgYSwgTWFuJiBiKSB7CiAgICAgICAgICAgIGlmIChhLmZhbSAhPSBiLmZhbSkgcmV0dXJuIGEuZmFtIDwgYi5mYW07CiAgICAgICAgICAgIGlmIChhLm5hbWUgIT0gYi5uYW1lKSByZXR1cm4gYS5uYW1lIDwgYi5uYW1lOwogICAgICAgICAgICBpZiAoYS55ZWFyICE9IGIueWVhcikgcmV0dXJuIGEueWVhciA8IGIueWVhcjsKICAgICAgICAgICAgaWYgKGEubXRoICE9IGIubXRoKSByZXR1cm4gYS5tdGggPCBiLm10aDsKICAgICAgICAgICAgcmV0dXJuIGEuZGF5IDwgYi5kYXk7CiAgICAgICAgfSk7CiAgICAgICAgY291dCA8PCBubTsKICAgICAgICBmb3IgKGF1dG8gaSA6IHVuLmxzdCkge2NvdXQgPDwgIiAgICAiIDw8IGkubmFtZSA8PCAnICcgPDwgaS5mYW07fQogICAgICAgIGNvdXQgPDwgJ1xuJzsKICAgIH0KICAgIHJldHVybiAwOwogfQ==
MwpNU1UgMQpIU0UgMgpNSVBUIDEwMAo1Ckl2YW4gSXZhbm92IDEgMSAxOTAwIDEwMCAyIE1TVSBIU0UKUGV0ciBQZXRyb3YgMiAxIDE5MDAgOTAgMiBNU1UgSFNFCkFsZXhhbmRlciBTaWRvcm92IDMgMSAxOTAwIDExMCAyIE1JUFQgSFNFCkl2YW4gUGV0cm92IDMgMSAxOTAwIDEwMCAzIEhTRSBNU1UgTUlQVApQZXRyIEl2YW5vdiA0IDEgMTkwMCA4MCAxIEhTRQ==
3
MSU 1
HSE 2
MIPT 100
5
Ivan Ivanov 1 1 1900 100 2 MSU HSE
Petr Petrov 2 1 1900 90 2 MSU HSE
Alexander Sidorov 3 1 1900 110 2 MIPT HSE
Ivan Petrov 3 1 1900 100 3 HSE MSU MIPT
Petr Ivanov 4 1 1900 80 1 HSE