https://www.luogu.com.cn/record/226471340
#include<bits/stdc++.h>
using namespace std;
string sy[110],nm[110];
string day[10]={"","Today is Monday.","Today is Tuesday.","Today is Wednesday.","Today is Thursday.","Today is Friday.","Today is Saturday.","Today is Sunday."};
bool f;
int n,m,p,wh[110],cim,ho[110];
void tru(int i){
if(ho[wh[i]]!=-1)
ho[wh[i]]=1;else
f=1;
}
void fal(int i){
if(ho[wh[i]]!=1)
ho[wh[i]]=-1;else
f=1;
}
int main(){
cin>>m>>n>>p;
for(int i=1;i<=m;i++)
cin>>nm[i];
for(int i=1;i<=p;i++){
string sn;
cin>>sn;
sn.erase(sn.end()-1);
for(int j=1;j<=m;j++)
if(nm[j]==sn)
wh[i]=j;
getline(cin,sy[i]);
sy[i].erase(sy[i].begin());
}
for(int td=1;td<=7;td++)
for(int cr=1;cr<=m;cr++){
f=0;
memset(ho,0,sizeof(ho));
for(int i=1;i<=p;i++){
if(sy[i]=="I am guilty."){
if(cr==wh[i])
tru(i);else
fal(i);
}
if(sy[i]=="I am not guilty."){
if(cr==wh[i])
fal(i);else
tru(i);
}
for(int j=1;j<=7;j++){
if(sy[i]==day[i])
if(j==td)
tru(i);else
fal(i);
}
for(int j=1;j<=m;j++){
if(sy[i]==nm[j]+" is guilty."){
if(cr==j)
tru(i);else
fal(i);
}
if(sy[i]==nm[j]+" is not guilty."){
if(cr==j)
fal(i);else
tru(i);
}
}
}
int fs=0,ds=0;
for(int i=1;i<=m;i++){
if(ho[i]==-1)
fs++;
if(ho[i]==0)
ds++;
}
if(f==0&&fs<=n&&fs+ds>=n)
if(cim!=0&&cim!=cr){
cout<<"Cannot Determine";
return 0;
}else
cim=cr;
}
if(cim==0)
cout<<"Impossible";else
cout<<nm[cim];
}