#include<bits/stdc++.h>
using namespace std;
struct wanjia
{
char card[2005];
int chusx=4,xianx=4,pais=4,shenf;
int yinx[15]={0},nfs=1;
int zhunu=0;
}pig[15];
int n,m,biaosf[15]={0},jshu=0;
char paid[1000005]={0};
bool slm[15]={0};
void zhengl(int y,int x)
{
for(int i=x;i<pig[y].pais;i++)pig[y].card[i]=pig[y].card[i+1];
pig[y].card[pig[y].pais]=0;pig[y].pais--;
}
void tao(int x,int y)
{
if(pig[x].xianx<=0||pig[x].chusx!=pig[x].xianx)
{
pig[x].xianx++;zhengl(x,y);
}
}
void jies()//可以
{
int i,j;
if(slm[0]==1)printf("FP\n");
else printf("MP\n");
for(i=0;i<n;i++)
{
if(slm[i]==1)printf("DEAD\n");
else
{
for(j=1;j<=pig[i].pais;j++)
{
if(j!=1)printf(" ");
printf("%c",pig[i].card[j]);
}
printf("\n");
}
}
jshu=1;
}
void die(int x,int y)
{
int i,j,k=1;
slm[y]=1;
if(x==0&&pig[y].shenf==2)
{
pig[x].pais=0;
memset(pig[x].card,0,sizeof(pig[x].card));
pig[x].zhunu=0;
}
for(i=0;i<n;i++)
{
if(pig[i].shenf==-1)
{
if(slm[i]==0)k=0;
}
}
if(k==1||slm[0]==1)jies();
if(pig[y].shenf==-1)
{
if(paid[++m]==0)pig[x].card[++pig[x].pais]=paid[m];
else pig[x].card[++pig[x].pais]=paid[m];
if(paid[++m]==0)pig[x].card[++pig[x].pais]=paid[m];
else pig[x].card[++pig[x].pais]=paid[m];
if(paid[++m]==0)pig[x].card[++pig[x].pais]=paid[m];
else pig[x].card[++pig[x].pais]=paid[m];
}
}
void shan(int x,int y)
{
int kou=1,i;
for(i=1;i<=pig[y].pais;i++)
{
if(pig[y].card[i]=='D')
{
zhengl(y,i);kou=0;break;
}
}
if(kou==1)
{
pig[y].xianx--;
if(pig[x].shenf==-1)biaosf[x]=-1;
if(pig[y].xianx<=0)
{
for(i=1;i<=pig[y].pais;i++)
{
if(pig[y].card[i]=='P')
{
tao(y,i);break;
}
}
if(pig[y].xianx<=0)die(x,y);
}
}
}
void sha(int x,int y)
{
int si=x+1;
while(slm[si]==1&&si<=n)si++;
if(si==n)si=0;
if(pig[x].shenf==-1&&si==0)
{
pig[x].nfs=0;
zhengl(x,y);shan(x,si);return;
}
if(pig[x].shenf==-1&&biaosf[si]==1)
{
pig[x].nfs=0;
zhengl(x,y);shan(x,si);return;
}
if(pig[x].shenf==2&&biaosf[si]==-1)
{
pig[x].nfs=0;
zhengl(x,y);shan(x,si);return;
}
if(pig[x].shenf==1&&biaosf[si]==-1)
{
pig[x].nfs=0;
zhengl(x,y);shan(x,si);return;
}
if(pig[x].shenf==1&&pig[x].yinx[si]==-1)
{
pig[x].nfs=0;
zhengl(x,y);shan(x,si);return;
}
}
void zhuge(int x,int y)
{
pig[x].zhunu=1;
zhengl(x,y);
for(int i=1;i<=x;i++)if(pig[x].card[i]=='K')sha(x,i);
}
void go(int x)
{
int i,j;
j=pig[x].pais;
for(i=1;i<=j;i++)
{
if(pig[x].card[i]=='P')tao(x,i);
if(pig[x].card[i]=='K')
{
if(pig[x].nfs==1||pig[x].zhunu==1)sha(x,i);
}
if(pig[x].card[i]=='Z')zhuge(x,i);
if(jshu==1)return;
printf("%d\n",pig[x].pais);
}
}
int main()
{
int i,j;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
{
string s;
cin>>s;
if(i==0)pig[i].shenf=1;
if(s=="ZP")pig[i].shenf=2;
if(s=="FP")pig[i].shenf=-1;
cin>>pig[i].card[1]>>pig[i].card[2];
cin>>pig[i].card[3]>>pig[i].card[4];
}
biaosf[0]=2;
for(i=1;i<=m;i++)cin>>paid[i];
for(i=m+1;i<=300000;i++)paid[i]=paid[m];
m=0;
while(1)
{
for(i=0;i<n;i++)
{
if(slm[i]==1)continue;
pig[i].card[++pig[i].pais]=paid[++m];
pig[i].card[++pig[i].pais]=paid[++m];
go(i);
pig[i].nfs=1;
}
if(jshu==1)break;
}
return 0;
}
/*
3 5
MP P K P K
ZP D D D P
FP P K Z K
K K K P K
主抓牌K K
主无牌可出
忠抓牌K P
忠无牌可出
反抓牌K K
反杀主,主-4,主死
*/