#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=x*10+c-'0';
c=getchar();
}
return f*x;
}
char readchar()
{
char c=getchar();
while(c<'A'||c>'Z') c=getchar();
return c;
}
const int N=15,M=3e3+5;
int n,m,kill[N],dodge[N],peach[N],ignore[N],FP;
int no_kill[N],no_dodge[N],no_peach[N],no_ignore[N];
int head[N],tail[N],last[M],next[M],p,HP[N],ans,who;
int shenfen[N],like[N],next_pig[N],last_pig[N],top;
bool killed,weapon[N];
char c[5],card[M];
void get(int x,int p)
{
if(p>top) card[p]=card[top];
last[p]=tail[x];
next[tail[x]]=p;
tail[x]=p;
if(!head[x]) head[x]=p;
if(card[p]=='K') kill[x]++;
if(card[p]=='D') dodge[x]++;
if(card[p]=='P') peach[x]++;
if(card[p]=='J') ignore[x]++;
}
void remove(int x,int u)
{
next[last[x]]=next[x];
last[next[x]]=last[x];
if(x==head[u]) head[u]=next[x];
if(x==tail[u]) tail[u]=last[x];
}
void dodging(int u)
{
if(no_dodge[u]==dodge[u]) HP[u]--;
else no_dodge[u]++;
}
bool saving(int u)
{
if(no_peach[u]==peach[u]) return 0;
else
{
HP[u]=1;
no_peach[u]++;
return 1;
}
}
void slayed(int u,int v)
{
next_pig[last_pig[v]]=next_pig[v];
last_pig[next_pig[v]]=last_pig[v];
if(v==1)
{
ans=2;
return;
}
else if(shenfen[v]==2)
{
FP--;
if(!FP)
{
ans=1;
return;
}
get(u,++p); get(u,++p); get(u,++p);
}
else if(shenfen[v]==3&&u==1)
{
head[u]=0; tail[u]=0; weapon[u]=0;
kill[u]=no_kill[u]=0;
dodge[u]=no_dodge[u]=0;
peach[u]=no_peach[u]=0;
ignore[u]=no_ignore[u]=0;
}
}
bool opposite(int u,int v)
{
if((like[v]!=4||u==1)&&like[v]&&shenfen[u]%2!=like[v]%2) return 1;
return 0;
}
int find(int u)
{
if(shenfen[u]==2) return 1;
for(int i=next_pig[u];i!=u;i=next_pig[i])
if((like[i]!=4||u==1)&&like[i]&&like[i]%2!=shenfen[u]%2)
return i;
return 0;
}
bool ignoring(int u,int v,bool f)
{
if(!f&&like[v]!=4&&like[v]&&shenfen[u]%2==like[v]%2&&ignore[u]>no_ignore[u])
{
like[u]=shenfen[u];
no_ignore[u]++;
if(!ignoring(u,u,1)) return 1;
}
for(int i=next_pig[u];i!=u;i=next_pig[i])
if(ignore[i]>no_ignore[i])
{
if(f&&like[u]!=4&&like[u]&&shenfen[i]%2!=like[u]%2)
{
like[i]=shenfen[i];
no_ignore[i]++;
if(!ignoring(i,u,1)) return 1;
}
else if(!f&&like[v]!=4&&like[v]&&shenfen[i]%2==like[v]%2)
{
like[i]=shenfen[i];
no_ignore[i]++;
if(!ignoring(i,u,1)) return 1;
}
}
return 0;
}
void fight(int u,int v)
{
if(shenfen[v]==3&&u==1) HP[v]--;
else if(kill[u]-no_kill[u]>=kill[v]-no_kill[v])
{
no_kill[u]+=kill[v]-no_kill[v];
no_kill[v]=kill[v];
HP[v]--;
}
else
{
no_kill[v]+=kill[u]-no_kill[u]+1;
no_kill[u]=kill[u];
HP[u]--;
}
}
void update(int u)
{
for(int i=head[u];i;i=next[i])
if(card[i]=='K'&&no_kill[u])
{
no_kill[u]--;
kill[u]--;
remove(i,u);
}
else if(card[i]=='D'&&no_dodge[u])
{
no_dodge[u]--;
dodge[u]--;
remove(i,u);
}
else if(card[i]=='P'&&no_peach[u])
{
no_peach[u]--;
peach[u]--;
remove(i,u);
}
else if(card[i]=='J'&&no_ignore[u])
{
no_ignore[u]--;
ignore[u]--;
remove(i,u);
}
}
bool doing(int u)
{
update(u);
for(int i=head[u];i;i=next[i])
{
if(card[i]=='Z')
{
weapon[u]=1;
remove(i,u);
return 1;
}
else if(card[i]=='P'&&HP[u]<4)
{
HP[u]++;
peach[u]--;
remove(i,u);
}
else if(card[i]=='K')
{
int v=next_pig[u];
if(opposite(u,v)&&(!killed||weapon[u]))
{
remove(i,u);
kill[u]--; killed=1;
like[u]=shenfen[u];
dodging(v);
if(!HP[v]&&!saving(v))
{
slayed(u,v);
if(ans) return 0;
if(shenfen[v]==2&&!next[i])
{
i=next[last[i]];
continue;
}
if(u==1&&shenfen[v]==3) return 0;
}
}
}
else if(card[i]=='F')
{
int v=find(u);
if(v)
{
remove(i,u);
like[u]=shenfen[u];
if(ignoring(u,v,0)) return 1;
fight(u,v);
if(!HP[u]&&!saving(u))
{
slayed(v,u);
return 0;
}
if(!HP[v]&&!saving(v))
{
slayed(u,v);
if(ans) return 0;
}
return 1;
}
}
else if(card[i]=='N')
{
remove(i,u);
for(int j=next_pig[u];j!=u;j=next_pig[j])
{
if(ignoring(u,j,0)) continue;
if(kill[j]==no_kill[j])
{
HP[j]--;
if(j==1&&!like[u]) like[u]=4;
}
else no_kill[j]++;
if(!HP[j]&&!saving(j))
{
slayed(u,j);
if(ans) return 0;
}
}
return 1;
}
else if(card[i]=='W')
{
remove(i,u);
for(int j=next_pig[u];j!=u;j=next_pig[j])
{
if(ignoring(u,j,0)) continue;
if(dodge[j]==no_dodge[j])
{
HP[j]--;
if(j==1&&!like[u]) like[u]=4;
}
else no_dodge[j]++;
if(!HP[j]&&!saving(j))
{
slayed(u,j);
if(ans) return 0;
}
}
return 1;
}
}
return 0;
}
int main()
{
n=read(); m=read();
for(int i=1;i<=n;i++)
{
next_pig[i]=i+1; last_pig[i]=i-1;
scanf("%s",c); HP[i]=4;
if(c[0]=='M')
{
shenfen[i]=1;
like[i]=1;
}
if(c[0]=='F')
{
shenfen[i]=2;
FP++;
}
if(c[0]=='Z') shenfen[i]=3;
for(int j=1;j<=4;j++)
{
card[++top]=readchar();
get(i,top);
}
}
last_pig[1]=n; next_pig[n]=1; who=1; p=top;
for(int i=1;i<=m;i++) card[++top]=readchar();
while(1)
{
get(who,++p); get(who,++p);
killed=0; while(doing(who));
if(ans)
{
if(ans==1) cout<<"MP\n";
else cout<<"FP\n";
for(int i=1;i<=n;i++)
{
if(!HP[i]) cout<<"DEAD\n";
else
{
update(i);
for(int j=head[i];j;j=next[j])
cout<<card[j]<<" ";
cout<<"\n";
}
}
break;
}
who=next_pig[who];
}
return 0;
}