#include<bits/stdc++.h>
using namespace std;
int cn['Z'+100];
char nc[400];
struct Pig
{
int hp,sf1,sf2;
int nxt;
int ln;
int alive;
int flag[9];
queue <int> p[9];
}p[20];
int pk[20100],cnt;
int n,m;
queue <int> zer;
inline void yuchuli()
{
cn['P']=1;
cn['K']=2;
cn['D']=3;
cn['F']=4;
cn['N']=5;
cn['W']=6;
cn['J']=7;
cn['Z']=8;
nc[1]='P';
nc[2]='K';
nc[3]='D';
nc[4]='F';
nc[5]='N';
nc[6]='W';
nc[7]='J';
nc[8]='Z';
for (int i=1;i<=13;i++)
p[i].hp=4;
return ;
}
inline void add(int i)
{
cnt++;
p[i].p[pk[min(cnt,m)]].push(cnt);
}
inline int del(int u)
{
int maxx=0x3f3f3f3f,maxn=-1;
for (int i=1;i<=8;i++)
if (p[u].flag[i]==1 && !p[u].p[i].empty() && p[u].p[i].front()<maxx)
{
maxx=p[u].p[i].front();
maxn=i;
}
if (maxn==-1) return 0;
p[u].p[maxn].pop();
p[u].flag[maxn]=0;
return maxn;
}
inline void read()
{
scanf("%d%d",&n,&m);
int j=0;
for (int i=1;i<=n;i++) p[i].nxt=i+1;
p[n].nxt=1;
for (int i=1;i<=n;i++)
{
string a;
cin>>a;
if (a=="MP") p[i].sf1=1,p[i].sf2=1;else
if (a=="ZP") p[i].sf1=1;else
if (a=="FP") p[i].sf1=2;
for (int i1=1;i1<=4;i1++)
{
char b;
j++;
m++;
cin>>b;
//scanf("%c",&b);
pk[j]=cn[int(b)];
add(i);
}
}
j++;
for (;j<=m;j++)
{
char b;
cin>>b;
//scanf("%c",&b);
pk[j]=cn[int(b)];
}
}
inline void win_lose()
{
if (p[1].alive==1)
{
puts("FP");
for (int i=1;i<=n;i++)
{
if (p[i].alive==1) puts("DEAD");
else
{
int qaq;
for (int j=1;j<=8;j++) p[i].flag[j]=1;
for (;;)
{
qaq=del(i);
p[i].flag[qaq]=1;
if (qaq==0) break;
putchar(nc[qaq]);
putchar(' ');
// cout<<nc[qaq]<<" ";
}
puts("");
}
}
exit(0);
}
for (int i=1;i<=n;i++)
{
if (p[i].alive==0 && p[i].sf1==2)
return ;
}
puts("MP");
for (int i=1;i<=n;i++)
{
if (p[i].alive==1) puts("DEAD");
else
{
int qaq;
for (int j=1;j<=8;j++) p[i].flag[j]=1;
for (;;)
{
qaq=del(i);
p[i].flag[qaq]=1;
if (qaq==0) break;
putchar(nc[qaq]);
putchar(' ');
}
puts("");
}
}
exit(0);
}
inline void GG(int u,int v)
{
if (p[u].alive==1) return ;
while (p[u].hp<=0 && !p[u].p[cn['P']].empty())
{
p[u].p[cn['P']].pop();
p[u].hp++;
// return ;
}
if (p[u].hp>=1) return ;
// cout<<u<<" "<<v;
if (p[u].hp<=0) p[u].alive=1;
for (int i=1;i<=n;i++)
if (p[i].nxt==u) p[i].nxt=p[u].nxt;
win_lose();
if (v==1 && p[u].sf1==1)
{
for (int i=1;i<=8;i++) p[v].p[i]=zer;
p[v].ln=0;
}
if (p[u].sf1==2)
{
add(v);
add(v);
add(v);
}
}
inline int dy(int u,int v)
{
if (p[v].sf2==0) return 0;
if (p[v].sf2==3 && u!=1) return 0;
if (p[v].sf2==3 && u==1) return 2;
if (p[u].sf1==p[v].sf2) return 1;
if (p[u].sf1!=p[v].sf2) return 2;
}
inline void kil(int u,int v)
{
p[u].sf2=p[u].sf1;
if (!p[v].p[cn['D']].empty())
{
p[v].p[cn['D']].pop();
return ;
}
p[v].hp--;
GG(v,u);
return ;
}
inline void peach(int i)
{
p[i].hp++;
return ;
}
inline void zg(int u)
{
if(p[u].hp<4) p[u].flag[cn['P']]=1;else p[u].flag[cn['P']]=0;
if (dy(u,p[u].nxt)!=2) p[u].flag[cn['K']]=0;
p[u].flag[cn['D']]=0;
p[u].flag[cn['F']]=0;
if (p[u].sf1==2) p[u].flag[cn['F']]=1;else
if (p[u].sf1==1)
{
for (int i=p[u].nxt;i!=u;i=p[i].nxt)
if (dy(u,i)==2) p[u].flag[cn['F']]=1;
}
p[u].flag[cn['N']]=1;
p[u].flag[cn['W']]=1;
p[u].flag[cn['J']]=0;
p[u].flag[cn['Z']]=1;
}
inline bool wx(int u)
{
if (p[u].p[7].empty()) return 0;
p[u].p[7].pop();
p[u].sf2=p[u].sf1;
for (int i=p[u].nxt;i!=u;i=p[i].nxt)
{
if (dy(i,u)==2)
{
// cout<<u<<endl;
if (wx(i)==1) return 0;
}
// cout<<u<<" ";
}
return 1;
}
inline void jd(int u)
{
int v=0;
// p[u].sf2=p[u].sf1;
for (int i=p[u].nxt;i!=u;i=p[i].nxt)
if (dy(u,i)==2){v=i;break;}
if (p[u].sf1==2) v=1;
for (int i=p[u].nxt;i!=u;i=p[i].nxt)
if (dy(i,v)==1){if (wx(i)) return ;}
if (u==1 && p[v].sf1==1)
{
p[v].hp--;
GG(v,u);
return ;
}
for (;;)
{
if (p[v].p[2].empty())
{
p[u].sf2=p[u].sf1;
p[v].hp--;
GG(v,u);
return ;
}else
p[v].p[2].pop();
if (p[u].p[2].empty())
{
p[v].sf2=p[v].sf1;
p[u].hp--;
GG(u,v);
return ;
}else
p[u].p[2].pop();
}
}
inline void nm(int u)
{
for (int i=p[u].nxt;i!=u;i=p[i].nxt)
{
bool qaqq=0;
if (dy(u,i)==1) qaqq=wx(u);
for (int j=p[u].nxt;j!=u && qaqq==0;j=p[j].nxt)
if (dy(j,i)==1) qaqq=wx(j);
if (qaqq) continue;
if (p[i].p[2].empty())
{
if (i==1 && p[u].sf2==0) p[u].sf2=3;
p[i].hp--;
GG(i,u);
}else p[i].p[2].pop();
}
}
inline void wj(int u)
{
for (int i=p[u].nxt;i!=u;i=p[i].nxt)
{
bool qaqq=0;
if (dy(u,i)==1) qaqq=wx(u);
for (int j=p[u].nxt;j!=u && qaqq==0;j=p[j].nxt)
if (dy(j,i)==1) qaqq=wx(j);
if (qaqq) continue;
if (p[i].p[3].empty())
{
if (i==1 && p[u].sf2==0) p[u].sf2=3;
p[i].hp--;
GG(i,u);
}else p[i].p[3].pop();
}
}
inline void huihe(int u)
{
if (p[u].alive==1) return ;
add(u);
add(u);
p[u].flag[cn['K']]=1;
int nowa=0;
while(1)
{
if (p[u].ln==1) p[u].flag[cn['K']]=1;
zg(u);
nowa=del(u);
if (nowa==1) peach(u);else
if (nowa==2) kil(u,p[u].nxt);else
if (nowa==4) jd(u);else
if (nowa==5) nm(u);else
if (nowa==6) wj(u);else
if (nowa==8) p[u].ln=1;else
return ;
}
}
int main()
{
yuchuli();
read();
// yuchuli1();
for (;;)
{
for (int i=1;i<=n;i++)
{
huihe(i);
// check();
}
}
return 0;
}