rt,只有7,8,10AC
#include <bits/stdc++.h>
using namespace std;
struct NO_16 {
int NO_52;
string NO_7;
NO_16(int t, string n) : NO_52(t), NO_7(n) {}
};
string NO_74[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int main() {
int M, N, NO_15;
cin >> M >> N >> NO_15;
vector<string> NO_11(M);
set<string> NO_10;
map<string, vector<NO_16>> NO_34;
for (int i = 0; i < M; i++) {
cin >> NO_11[i];
NO_10.insert(NO_11[i]);
}
cin.ignore();
for (int i = 0; i < NO_15; i++) {
string NO_53;
getline(cin, NO_53);
size_t NO_84 = NO_53.find(':');
if (NO_84 == string::npos) {
continue;
}
string NO_38 = NO_53.substr(0, NO_84);
string NO_27 = (NO_84 + 2 <= NO_53.size()) ? NO_53.substr(NO_84 + 2) : "";
if (NO_27 == "I am guilty.") {
NO_34[NO_38].push_back(NO_16(1, ""));
} else if (NO_27 == "I am not guilty.") {
NO_34[NO_38].push_back(NO_16(2, ""));
} else {
size_t NO_92 = NO_27.find(" is guilty.");
if (NO_92 != string::npos && NO_92 + 11 == NO_27.size()) {
string NO_89 = NO_27.substr(0, NO_92);
NO_34[NO_38].push_back(NO_16(3, NO_89));
} else {
size_t NO_102 = NO_27.find(" is not guilty.");
if (NO_102 != string::npos && NO_102 + 15 == NO_27.size()) {
string NO_89 = NO_27.substr(0, NO_102);
NO_34[NO_38].push_back(NO_16(4, NO_89));
} else if (NO_27.size() >= 9 && NO_27.substr(0, 9) == "Today is ") {
if (NO_27.back() == '.') {
string NO_66 = NO_27.substr(9, NO_27.size() - 10);
bool NO_9 = false;
for (int j = 0; j < 7; j++) {
if (NO_66 == NO_74[j]) {
NO_9 = true;
break;
}
}
if (NO_9) {
NO_34[NO_38].push_back(NO_16(5, NO_66));
}
}
}
}
}
}
set<string> NO_20;
for (int idx = 0; idx < M; idx++) {
string x = NO_11[idx];
bool NO_8 = false;
for (int d = 0; d < 7; d++) {
int NO_90 = 0;
int NO_71 = 0;
int NO_19 = 0;
bool NO_23 = true;
for (int i = 0; i < M; i++) {
string s = NO_11[i];
if (NO_34.find(s) == NO_34.end() || NO_34[s].empty()) {
NO_19++;
continue;
}
vector<NO_16>& NO_14 = NO_34[s];
bool NO_85 = true;
bool NO_13 = true;
for (NO_16& st : NO_14) {
bool NO_73;
if (st.NO_52 == 1) {
NO_73 = (s == x);
} else if (st.NO_52 == 2) {
NO_73 = (s != x);
} else if (st.NO_52 == 3) {
if (NO_10.find(st.NO_7) == NO_10.end()) {
NO_73 = false;
} else {
NO_73 = (st.NO_7 == x);
}
} else if (st.NO_52 == 4) {
if (NO_10.find(st.NO_7) == NO_10.end()) {
NO_73 = true;
} else {
NO_73 = (st.NO_7 != x);
}
} else if (st.NO_52 == 5) {
NO_73 = (st.NO_7 == NO_74[d]);
} else {
continue;
}
if (NO_73) {
NO_13 = false;
} else {
NO_85 = false;
}
}
if (NO_85 && NO_13) {
NO_19++;
} else if (NO_85) {
NO_90++;
} else if (NO_13) {
NO_71++;
} else {
NO_23 = false;
break;
}
}
if (!NO_23) {
continue;
}
if (NO_71 <= N && N <= NO_71 + NO_19) {
NO_8 = true;
break;
}
}
if (NO_8) {
NO_20.insert(x);
}
}
if (NO_20.empty()) {
cout << "Impossible" << endl;
} else if (NO_20.size() == 1) {
cout << *NO_20.begin() << endl;
} else {
cout << "Cannot Determine" << endl;
}
return 0;
}