#10 WA 了
#include<bits/stdc++.h>
using namespace std;
int n,m,fzs,sp1,num1,num2;
char sf1[11],pd[2001],s[11];
struct node
{
int smz,sps,next,last;
char sf,sp[2001];
bool zgln;
}pig[11];
bool ch,js;
void mp(int i)
{
if(!m)
m++;
//cout<<i<<"摸到"<<pd[m]<<endl;
pig[i].sp[++pig[i].sps]=pd[m--];
}
void sw(int p1,int p2)
{
//cout<<p1<<"即将杀死"<<p2<<endl;
for(int i=1;i<=pig[p2].sps;i++)
if(pig[p2].sp[i]=='P')
{
pig[p2].sp[i]='O';
pig[p2].smz++;
//cout<<p2<<"桃,生命"<<pig[p2].smz<<endl;
return;
}
//cout<<p1<<"杀死"<<p2<<endl;
pig[pig[p2].next].last=pig[p2].last;
pig[pig[p2].last].next=pig[p2].next;
if(p2==1)
{
js=1;
return;
}
if(pig[p2].sf=='F')
{
fzs--;
if(!fzs)
{
js=1;
return;
}
for(int i=1;i<=3;i++)
mp(p1);
}
if(pig[p1].sf=='M'&&pig[p2].sf=='Z')
pig[p1].sps=0,pig[p1].zgln=0;
}
void sha(int p1,int p2)
{
for(int i=1;i<=pig[p2].sps;i++)
if(pig[p2].sp[i]=='D')
{
//cout<<p2<<"闪\n";
pig[p2].sp[i]='O';
return;
}
pig[p2].smz--;
//cout<<p2<<"剩余生命"<<pig[p2].smz<<endl;
if(!pig[p2].smz)
sw(p1,p2);
}
bool wxkj(int p1,int p2,int p3)
{
int i=p1;
while(1)
{
if(p3==1)
{
if(sf1[p2]==pig[i].sf||(sf1[p2]=='M'&&pig[i].sf=='Z')||(sf1[p2]=='Z'&&pig[i].sf=='M'))
for(int j=1;j<=pig[i].sps;j++)
if(pig[i].sp[j]=='J')
{
pig[i].sp[j]='O';
sf1[i]=pig[i].sf;
return !wxkj(i,p1,0);
}
}
else
{
if(((pig[i].sf=='M'||pig[i].sf=='Z')&&sf1[p1]=='F')||(pig[i].sf=='F'&&(sf1[p1]=='M'||sf1[p1]=='Z')))
for(int j=1;j<=pig[i].sps;j++)
if(pig[i].sp[j]=='J')
{
pig[i].sp[j]='O';
sf1[i]=pig[i].sf;
return !wxkj(i,p1,0);
}
}
i=pig[i].next;
if(i==p1)
break;
}
return false;
}
void nzrq(int p1)
{
for(int p2=pig[p1].next;p2!=p1;p2=pig[p2].next)
if(!wxkj(p1,p2,1))
{
int i;
for(i=1;i<=pig[p2].sps;i++)
if(pig[p2].sp[i]=='K')
{
//cout<<p2<<"杀\n";
pig[p2].sp[i]='O';
break;
}
if(i>pig[p2].sps)
{
pig[p2].smz--;
//cout<<p2<<"剩余生命"<<pig[p2].smz<<endl;
if(p2==1&&sf1[p1]=='P')
sf1[p1]='L';
if(!pig[p2].smz)
sw(p1,p2);
if(js)
return ;
}
}
}
void wjqf(int p1)
{
for(int p2=pig[p1].next;p2!=p1;p2=pig[p2].next)
if(!wxkj(p1,p2,1))
{
int i;
for(i=1;i<=pig[p2].sps;i++)
if(pig[p2].sp[i]=='D')
{
//cout<<p2<<"闪\n";
pig[p2].sp[i]='O';
break;
}
if(i>pig[p2].sps)
{
pig[p2].smz--;
//cout<<p2<<"剩余生命"<<pig[p2].smz<<endl;
if(p2==1&&sf1[p1]=='P')
sf1[p1]='L';
if(!pig[p2].smz)
sw(p1,p2);
if(js)
return;
}
}
}
void jd(int p1,int p2)
{
if(wxkj(p1,p2,1))
return;
if(p1==1&&pig[p2].sf=='Z')
{
pig[p2].smz--;
//cout<<p2<<"剩余生命"<<pig[p2].smz<<endl;
if(!pig[p2].smz)
sw(p1,p2);
return ;
}
int num1=0,num2=0;
for(int i=1;i<=pig[p1].sps;i++)
if(pig[p1].sp[i]=='K')
num1++;
for(int i=1;i<=pig[p2].sps;i++)
if(pig[p2].sp[i]=='K')
num2++;
if(num2<=num1)
{
pig[p2].smz--;
//cout<<p2<<"剩余生命"<<pig[p2].smz<<endl;
int x=0;
for(int i=1;i<=pig[p1].sps;i++)
{
if(x==num2)
break;
if(pig[p1].sp[i]=='K')
{
pig[p1].sp[i]='O';
x++;
}
}
for(int i=1;i<=pig[p2].sps;i++)
if(pig[p2].sp[i]=='K')
pig[p2].sp[i]='O';
if(!pig[p2].smz)
sw(p1,p2);
return;
}
else
{
pig[p1].smz--;
//cout<<p1<<"剩余生命"<<pig[p1].smz<<endl;
int x=0;
for(int i=1;i<=pig[p2].sps;i++)
{
if(x==num1+1)
break;
if(pig[p2].sp[i]=='K')
{
pig[p2].sp[i]='O';
x++;
}
}
for(int i=1;i<=pig[p1].sps;i++)
if(pig[p1].sp[i]=='K')
pig[p1].sp[i]='O';
if(!pig[p1].smz)
sw(p2,p1);
return;
}
}
void zgs()
{
js=0;
if(!fzs)
{
js=1;
return;
}
for(int i=1;i;i=pig[i].next)
{
for(int j=1;j<=2;j++)
mp(i);
ch=1;
for(int j=1;j<=pig[i].sps;j++)
if(pig[i].sp[j]!='O')
{
if(!pig[i].smz)
break;
sp1=pig[i].sp[j];
if(sp1=='P')
if(pig[i].smz<4)
{
pig[i].smz++;
//cout<<i<<"桃,生命"<<pig[i].smz<<endl;
pig[i].sp[j]='O';
continue;
}
if(sp1=='K')
{
if(!ch&&!pig[i].zgln)
continue;
if(pig[i].sf=='M'&&sf1[pig[i].next]!='L'&&sf1[pig[i].next]!='F')
continue;
if(pig[i].sf=='Z'&&sf1[pig[i].next]!='F')
continue;
if(pig[i].sf=='F'&&sf1[pig[i].next]!='Z'&&sf1[pig[i].next]!='M')
continue;
pig[i].sp[j]='O';
//cout<<i<<"对"<<pig[i].next<<"杀\n";
sha(i,pig[i].next);
sf1[i]=pig[i].sf;
ch=0;
if(js)
return;
continue;
}
if(sp1=='F')
{
if(pig[i].sf=='F')
{
//cout<<i<<"对1决斗\n";
pig[i].sp[j]='O';
jd(i,1);
sf1[i]=pig[i].sf;
if(js)
return;
j=0;
continue;
}
for(int k=pig[i].next;k!=i;k=pig[k].next)
if((pig[i].sf=='M'&&(sf1[k]=='L'||sf1[k]=='F'))||(pig[i].sf=='Z'&&sf1[k]=='F'))
{
//cout<<i<<"对"<<k<<"决斗\n";
pig[i].sp[j]='O';
jd(i,k);
sf1[i]=pig[i].sf;
if(js)
return;
j=0;
break;
}
continue;
}
if(sp1=='N')
{
//cout<<i<<"南猪入侵\n";
pig[i].sp[j]='O';
nzrq(i);
if(js)
return;
continue;
}
if(sp1=='W')
{
//cout<<i<<"万箭齐发\n";
pig[i].sp[j]='O';
wjqf(i);
if(js)
return;
continue;
}
if(sp1=='Z')
{
//cout<<i<<"猪哥连弩\n";
pig[i].sp[j]='O';
pig[i].zgln=1;
j=0;
continue;
}
}
}
}
int main()
{
//freopen("P2482_10.in","r",stdin);
cin>>n>>m;
for(int i=1;i<=n;i++)
pig[i].next=i+1,pig[i].last=i-1;
pig[n].next=1;
pig[1].last=n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=2000;j++)
pig[i].sp[j]='O';
cin>>s;
pig[i].sf=s[0];
for(int j=1;j<=4;j++)
{
cin>>s;
pig[i].sp[j]=s[0];
}
pig[i].smz=4;
pig[i].sps=4;
if(pig[i].sf=='F')
fzs++;
pig[i].zgln=0;
}
for(int i=1;i<=m;i++)
{
cin>>s;
pd[m-i+1]=s[0];
}
sf1[1]='M';
for(int i=2;i<=n;i++)
sf1[i]='P';
zgs();
if(pig[1].smz<=0)
cout<<"FP\n";
else
cout<<"MP\n";
for(int i=1;i<=n;i++)
{
if(pig[i].smz<=0)
cout<<"DEAD\n";
else
{
for(int j=1;j<=pig[i].sps;j++)
if(pig[i].sp[j]!='O')
cout<<pig[i].sp[j]<<" ";
cout<<endl;
}
}
return 0;
}