#include<bits/stdc++.h>
using namespace std;
string syntax[5]={"am guilty","am not guilty","is guilty.","is not guilty."};
string week[8]={" ","is Monday","is Tuesday","is Wednesday","is Thursday","is Friday","is Saturday","is Sunday"};
int N,M,P;
string name[30],sentence[30];
map<string,int> Map;
struct person
{
bool isGuilty;
int markedWeek;
int markedStatus[30];
vector<int> guiltyList,notGuiltyList;
}a[30];
bool status[30];
int work(int day,int person)
{
int cnt=0,tmp=0;
for(int i=1;i<=N;i++)
{
bool f_true=0,f_false=0;
if(a[i].isGuilty || (a[i].markedWeek && a[i].markedWeek!=day))
f_false=1;
if(a[i].markedStatus[person]==-1)
f_false=1;
if(a[i].markedStatus[person]==1)
f_true=1;
if(i!=person && a[i].markedStatus[i]==1)
f_false=1;
for(int j=0;j<a[i].guiltyList.size();j++)
if(a[i].guiltyList[j]!=person)
f_false=1;
for(int j=0;j<a[i].notGuiltyList.size();j++)
if(a[i].notGuiltyList[j]!=person)
f_true=1;
if(a[i].markedWeek==day)
f_true=1;
if(i==person && a[i].markedStatus[person]==1)
f_true=1;
if(i!=person && a[i].markedStatus[i]==-1)
f_true=1;
if(f_true && f_false)
return 0;
if(f_false)
tmp++;
if(!f_true && !f_false)
cnt++;
}
if(tmp>M)
return 0;
if(tmp+cnt<M)
return 0;
return 1;
}
int target=0;
void solve(){
return;
}
int main(){
cin>>N>>M>>P;
for(int i=1;i<=N;i++){
cin>>name[i];
Map[name[i]]=i;
}
for(int i=1;i<=P;++i)
{
cin>>sentence[i];
sentence[i]=sentence[i].substr(0,sentence[i].find(':'));
int id=Map[sentence[i]];
getchar();
getline(cin,sentence[i]);
if(sentence[i][0]=='I')
{
if(sentence[i].find(syntax[0])!=-1)
{
a[id].markedStatus[id]=1;
continue;
}
else if(sentence[i].find(syntax[1])!=-1)
{
a[id].markedStatus[id]=-1;
continue;
}
}
else
{
int tmp=0;
tmp=sentence[i].find(syntax[2]);
if(tmp!=-1)
{
sentence[i]=sentence[i].substr(0,tmp-1);
a[id].markedStatus[Map[sentence[i]]]=1;
a[id].guiltyList.push_back(Map[sentence[i]]);
continue;
}
tmp=sentence[i].find(syntax[3]);
if(tmp!=-1)
{
sentence[i]=sentence[i].substr(0,tmp-1);
a[id].markedStatus[Map[sentence[i]]]=-1;
a[id].notGuiltyList.push_back(Map[sentence[i]]);
continue;
}
for(int j=1;j<=7;j++)
{
tmp=sentence[i].find(week[j]);
if(tmp!=-1)
{
if(!a[id].markedWeek)
a[id].markedWeek=j;
else
a[id].isGuilty=1;
break;
}
}
}
}
int tmp=0;
for(int i=1;i<=7;i++)
for(int j=1;j<=N;j++)
{
if(status[j])
continue;
if(work(i,j))
{
++tmp;
status[j]=1;
if(tmp>=2)
puts("Cannot Determine"),exit(0);
target=j;
}
}
if(!target)
puts("Impossible");
cout<<name[target];
return 0;
}
rt,Subtask 1 WA