#include<string>
#include<iostream>
#include<string.h>
using namespace std;
string name[25];
string gc[110][2];
string day;
string s;
int is[110];
int m,n,p;
bool yygc(string q){
if(q=="I am guilty.")return true;
if(q=="I am not guilty.")return true;
if(q=="Today is Sunday.")return true;
if(q=="Today is Saturday.")return true;
if(q=="Today is Friday.")return true;
if(q=="Today is Thursday.")return true;
if(q=="Today is Wednesday.")return true;
if(q=="Today is Tuesday.")return true;
if(q=="Today is Monday.")return true;
for(int i=0;i+14<q.size();i++){
if(q.substr(i,14)==" is not guilty")return true;
}
for(int i=0;i+10<q.size();i++){
if(q.substr(i,10)==" is guilty.")return true;
}
return false;
}
int find(string nm){
for(int j=1;j<=m;j++){
if(name[j]==nm)return j;
}
}
bool check(int j){
int _;
for(int k=1;k<=p;k++){
// cout<<gc[k][0]<<' '<<gc[k][1]<<'\n';
_=find(gc[k][0]);
if(gc[k][1]=="I am guilty."){
if(name[j]==gc[k][0]){
if(is[j]==0)return false;
is[j]=1;
}
else{
if(is[_]==1)return false;
is[_]=0;
}
}
else if(gc[k][1]=="I am not guilty."){
if(name[j]==gc[k][0]){
if(is[j]==1)return false;
is[j]=0;
}
else{
if(is[_]==0)return false;
is[_]=1;
}
}
else if(gc[k][1].substr(0,9)=="Today is "){
if(gc[k][1]==day){
if(is[_]==0)return false;
is[_]=1;
}
else{
if(is[_]==1)return false;
is[_]=0;
}
}
else{
bool fl=true;
for(int i=0;i+4<gc[k][1].size();i++){
if(gc[k][1].substr(i,4)==" not"){
fl=false;
break;
}
}
string nam="";
for(int i=0;i<gc[k][1].size();i++){
if(gc[k][1][i]==' ')break;
nam=nam+gc[k][1][i];
}
if(!fl){
if(name[j]==nam){
if(is[_]==1)return false;
is[_]=0;
}
else{
if(is[_]==0)return false;
is[_]=1;
}
}
else{
if(name[j]==nam){
if(is[_]==0)return false;
is[_]=1;
}
else{
if(is[_]==1)return false;
is[_]=0;
}
}
}
}
_=0;
int __=0;
for(int i=1;i<=m;i++){
if(is[i]==0)_++;
if(is[i]==-1)__++;
}
return ((__+_>=n)&&(_<=n));
}
int main(){
cin>>m>>n>>p;
getchar();
getchar();
for(int i=1;i<=m;i++){
cin>>name[i];
// cout<<i<<' '<<name[i]<<'\n'<<'\n';
}
// for(int i=1;i<=m;i++){
// cout<<name[i]<<'\n';
// }
for(int i=1;i<=p;){
cin>>s;
s=s.substr(0,s.size()-1);
gc[i][0]=s;
getline(cin,s);
if(s[s.size()-1]=='.')s=s.substr(1,s.size()-1);
else s=s.substr(1,s.size()-2);
if(yygc(s))gc[i++][1]=s;
else p--;
}
// for(int i=1;i<=p;i++){
// cout<<gc[i][0]<<": "<<gc[i][1]<<'\n';
// }
int ans,jsq=0;
for(int j=1;j<=m;j++){
for(int i=1;i<8;i++){
if(i==7)day="Today is Sunday.";
else if(i==6)day="Today is Saturday.";
else if(i==5)day="Today is Friday.";
else if(i==4)day="Today is Thursday.";
else if(i==3)day="Today is Wednesday.";
else if(i==2)day="Today is Tuesday.";
else if(i==1)day="Today is Monday.";
for(int k=0;k<110;k++)is[k]=-1;
if(check(j)){
// cout<<j<<' '<<i<<'\n';
// for(int k=1;k<=m;k++)cout<<is[k]<<' ';
// cout<<'\n';
jsq++;
ans=j;
break;
}
}
}
if(jsq==0)cout<<"Impossible\n";
else if(jsq>1)cout<<"Cannot Determine\n";
else cout/*<<ans<<' '*/<<name[ans]<<'\n';
return 0;
}
错:#5 #6 #12