#include #include char herci_s[100][100]; char role_s[100][100]; int herci_gut[100]; int herci_schl[100]; int nh_gut, nh_schl; int nherci, nrole; int hbusy[100]; struct { int n; int herci[100]; } role_obs[100]; int nzads; int find_herec(const char *her) { int i; for (i = 0; ; i++) if (strcmp(herci_s[i], her) == 0) return i; } int find_role(const char *role) { int i; for (i = 0; ; i++) if (strcmp(role_s[i], role) == 0) return i; } int test_role(int r) { int h; if (r == nrole) return 1; for (h = 0; h < role_obs[r].n; h++) { hbusy[role_obs[r].herci[h]] = 1; if (test_role(r+1)) return 1; hbusy[role_obs[r].herci[h]] = 0; } return 0; } int main(void) { scanf("%d", &nzads); while (nzads--) { int i; int add; bzero(role_obs, sizeof(role_obs)); bzero(hbusy, sizeof(hbusy)); scanf("%d %d %d", &nherci, &nrole, &nh_schl); nh_gut = nherci-nh_schl; for (i = 0; i < nherci; i++) scanf("%s", herci_s[i]); for (i = 0; i < nrole; i++) scanf("%s", role_s[i]); for (i = 0; i < nherci; i++) { char buf[666]; int her; int nr; scanf("%s", buf); her = find_herec(buf); scanf("%d", &nr); while (nr--) { int r; scanf("%s", buf); r = find_role(buf); role_obs[r].herci[role_obs[r].n++] = her; } } for (i = 0; i < nh_schl; i++) { char buf[666]; int her; int r; int h; scanf("%s", buf); her = find_herec(buf); for (r = 0; r < nrole; r++) { for (h = 0; h < role_obs[r].n; h++) { if (role_obs[r].herci[h] == her) { role_obs[r].n--; memmove(role_obs[r].herci+h, role_obs[r].herci+h+1, (role_obs[r].n-h)*sizeof(int)); break; } } } } if (!test_role(0)) { printf("Zatraceni demonstranti!\n"); } else { printf("Premiera bude!\n"); } } return 0; }