#include<bits/stdc++.h>
using namespace std;
int n,m;
int inv(int fr,int kd);
int findinv(int st,int kd);
void kill(int fr,int to);
void duel(int fr,int to);
void check();
void end(int result);
struct SCARDS{
char cds[2005];int tp;
char give()
{
if(tp==m)return cds[m];
return cds[tp++];
}
}cards;
struct SPIG{
int hp,cnt,num;char card[2005],id[5];
bool crossbow,antilike,anti,faith,dead;
SPIG *last,*nx;
void getcard(){card[++cnt]=cards.give();}
void getcard(char cd){card[++cnt]=cd;}
bool known(){return (anti||faith);}
bool has(char cd){
for(int i=1;i<=cnt;i++)
if(card[i]==cd)return 1;
return 0;
}
void use(char cd){
for(int i=1;i<=cnt;i++)
if(card[i]==cd){card[i]='x';return;}
}
void extort(char crd){
SPIG* pt=nx;
while(pt!=this){
int k=0;
if(pt->anti)k=findinv(num,0);
if(pt->faith)k=findinv(num,1);
if(k)k=inv(k,(pt->faith));
if(!k){
if(pt->has(crd))pt->use(crd);
else{
pt->hurt(num);
if(pt->id[1]=='M'&&(!known()))
antilike=1;
}
}
pt=pt->nx;
}
}
void play(){
getcard();getcard();
bool kl=0;
for(int i=1;i<=cnt&&(!dead);i++){
if(card[i]=='x'||card[i]=='D')continue;
if(card[i]=='Z')card[i]='x',crossbow=1,i=0;
if(card[i]=='P'&&hp<4)card[i]='x',hp++;
if(card[i]=='N')card[i]='x',extort('K'),i=0;
if(card[i]=='W')card[i]='x',extort('D'),i=0;
if(card[i]=='K'&&((!kl)||crossbow)){
if(id[1]=='M')
if(nx->antilike||nx->anti)
card[i]='x',kill(num,nx->num),kl=1,i=0;
if(id[1]=='Z')
if(nx->anti)
card[i]='x',kill(num,nx->num),kl=1,i=0;
if(id[1]=='F')
if((nx->faith)||(nx->id[1]=='M'))
card[i]='x',kill(num,nx->num),kl=1,i=0;
}
if(card[i]=='F'){
if(id[1]=='M'){
SPIG *pt=nx;
while(pt!=this){
if((pt->antilike)||(pt->anti)){
card[i]='x';
duel(num,pt->num),i=0;
break;
}
pt=(pt->nx);
}
}
if(id[1]=='Z'){
SPIG *pt=nx;
while(pt!=this){
if(pt->anti){
card[i]='x';
duel(num,pt->num),i=0;
break;
}
pt=(pt->nx);
}
}
if(id[1]=='F')card[i]='x',duel(num,1),i=0;
}
}
}
bool save(){
if(has('P'))return use('P'),hp++,1;
return 0;
}
void hurt(int cause);
}pig[15];
void SPIG::hurt(int cause){
hp--;
if(hp)return;
if(save())return;
dead=1;
check();
last->nx=nx;nx->last=last;
if(pig[cause].dead)return;
if(id[1]=='Z'&&pig[cause].id[1]=='M'){
for(int i=1;i<=pig[cause].cnt;i++)
pig[cause].card[i]='x';
pig[cause].crossbow=0;
}
if(id[1]=='F')
for(int i=1;i<=3;i++)
pig[cause].getcard();
}
void kill(int fr,int to){
if(pig[to].has('D'))pig[to].use('D');
else pig[to].hurt(fr);
if(pig[to].id[1]=='M'||pig[to].faith)
pig[fr].anti=1;
if(pig[to].anti)
pig[fr].faith=1,pig[fr].antilike=0;
}
void duel(int fr,int to){
if(pig[fr].id[1]=='M'&&pig[to].id[1]=='Z'){
pig[to].hurt(fr);
return;
}
int k=0;
if(pig[fr].id[1]!='M'){
if(pig[to].anti)pig[fr].faith=1,pig[fr].antilike=0;
else pig[fr].anti=1;
}
if(pig[to].anti)k=findinv(fr,0);
if(pig[to].faith)k=findinv(fr,1);
if(k)k=inv(k,pig[to].faith);
if(!k){
int fir=to,sec=fr;
while(1){
if(pig[fir].has('K'))
pig[fir].use('K'),fir^=sec^=fir^=sec;
else
{pig[fir].hurt(sec);break;}
}
}
}
int inv(int fr,int kd){
pig[fr].use('J');
if(kd)pig[fr].faith=1,pig[fr].antilike=0;
else pig[fr].anti=1;
int k=findinv(fr,1-kd);
if(k)return 1-inv(k,1-kd);
else return 1;
}
int findinv(int st,int kd){
SPIG* pt=&pig[st];
do{
if((!kd)&&pt->id[1]=='F'&&pt->has('J'))
return pt->num;
if(kd&&(pt->id[1]=='Z'||pt->id[1]=='M')&&pt->has('J'))
return pt->num;
pt=pt->nx;
}while(pt->num!=st);
return 0;
}
void check(){
bool good=0,bad=0;
for(int i=1;i<=n;i++){
if(pig[i].id[1]=='M'&&pig[i].dead)end(0);
if(!pig[i].dead){
if(pig[i].id[1]=='F')bad=1;
else good=1;
}
if(good&&bad)return;
}
end(good);
}
void end(int result){
if(result)printf("MP\n");
else printf("FP\n");
for(int i=1;i<=n;i++){
if(pig[i].dead)printf("DEAD");
else
for(int j=1;j<=pig[i].cnt;j++)
if(pig[i].card[j]!='x')
printf("%c ",pig[i].card[j]);
printf("\n");
}
exit(0);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s",pig[i].id+1);
for(int j=1;j<=4;j++){
char cd[5];
scanf("%s",cd+1);
pig[i].getcard(cd[1]);
}
pig[i].hp=4;pig[i].num=i;
if(i==n)pig[i].nx=&pig[1];
else pig[i].nx=&pig[i+1];
if(i==1)pig[i].last=&pig[n];
else pig[i].last=&pig[i-1];
}
pig[1].faith=1;cards.tp=1;
for(int i=1;i<=m;i++){
char tmp[5];
scanf("%s",tmp+1);
cards.cds[i]=tmp[1];
}
check();
while(1)
for(int i=1;i<=n;i++)
if(!pig[i].dead)pig[i].play();
return 0;
}