#include"bits/stdc++.h"
using namespace std;
struct node{
int lastp;
bool zgln;
bool dead;
int status;
string card;
int blood;
int cardcnt;
int brightstatus;
int beside;
}pig[20];
queue<char>cardq;
char lastcard;
bool gameend;
int n,m,now,f,leifan[20];
void end(bool winner){
gameend=1;
if(winner==0){
cout<<"FP"<<endl;
}
else cout<<"MP"<<endl;
for(int i=1;i<=n;i++){
if(pig[i].dead) printf("DEAD\n");
else{
for(int j=1;j<=pig[i].cardcnt;j++){
cout<<pig[i].card[j]<<' ';
}
cout<<endl;
}
}
return;
}
void getcard(int x,int a){
for(int i=1;i<=a;i++){
if(cardq.empty()) cardq.push(lastcard);
pig[x].card+=cardq.front();
pig[x].cardcnt++;
cardq.pop();
}
}
void gg(int x){
pig[x].dead=1;
if(pig[x].status==1){
end(0);
return;
}
for(int i=1;i<=n;i++){
if(pig[i].dead==0&&pig[i].beside==x){
pig[i].beside=pig[x].beside;
break;
}
}
if(pig[x].status==3){
f--;
if(f==0){
end(1);
return;
}
getcard(pig[x].lastp,3);
}
if(pig[x].status==2&&pig[x].lastp==1){
pig[1].card.erase(1);
pig[1].cardcnt=0;
pig[1].zgln=0;
}
}
void binsi(int x){
for(int i=1;i<=pig[x].cardcnt;i++){
if(pig[x].card[i]=='P'){
pig[x].card.erase(i,1);
pig[x].cardcnt--;
pig[x].blood++;
if(pig[x].blood==1) return;
}
}
if(pig[x].blood<=0) gg(x);
}
bool wuxie(int x,bool good){
if((pig[x].status==1||pig[x].brightstatus==2)&&good==1||pig[x].brightstatus==3&&good==0){
for(int i=x,cnt=1;cnt<=n;i=pig[i].beside,cnt++){
if(pig[i].status!=3) continue;
if(pig[i].dead) continue;
for(int j=1;j<=pig[i].cardcnt;j++){
if(pig[i].card[j]=='J'){
pig[i].card.erase(j,1);
pig[i].cardcnt--;
pig[i].brightstatus=3;
leifan[i]=0;
return 1;
}
}
}
}
else{
for(int i=x,cnt=1;cnt<=n;i=pig[i].beside,cnt++){
if(pig[i].status==3) continue;
if(pig[i].dead) continue;
for(int j=1;j<=pig[i].cardcnt;j++){
if(pig[i].card[j]=='J'){
pig[i].card.erase(j,1);
pig[i].cardcnt--;
if(pig[i].brightstatus!=1){
leifan[i]=0;
pig[i].brightstatus=2;
}
return 1;
}
}
}
}
return 0;
}
void nanwan(int x,bool nw){
for(int i=pig[x].beside;i!=x;i=pig[i].beside){
if(pig[i].dead) continue;
if(!nw){
if(pig[i].brightstatus!=0){
bool wx=wuxie(i,0),g=0;
while(wx){
g=!g;
wx=wuxie(i,g);
}
if(g){
continue;
}
}
bool flag=0;
for(int j=1;j<=pig[i].cardcnt;j++){
if(pig[i].card[j]=='K'){
pig[i].card.erase(j,1);
pig[i].cardcnt--;
flag=1;
break;
}
}
if(flag==0){
pig[i].blood--;
pig[i].lastp=x;
if(pig[i].blood<=0){
binsi(i);
if(gameend) return;
}
if(i==1){
if(pig[x].brightstatus==0){
leifan[x]=1;
}
}
}
}
else{
if(pig[i].brightstatus!=0){
bool wx=wuxie(i,0),g=0;
while(wx){
g=!g;
wx=wuxie(i,g);
}
if(g){
continue;
}
}
bool flag=0;
for(int j=1;j<=pig[i].cardcnt;j++){
if(pig[i].card[j]=='D'){
pig[i].card.erase(j,1);
pig[i].cardcnt--;
flag=1;
break;
}
}
if(flag==0){
pig[i].blood--;
pig[i].lastp=x;
if(pig[i].blood<=0){
binsi(i);
if(gameend) return;
}
if(i==1){
if(pig[x].brightstatus==0){
leifan[x]=1;
}
}
}
}
}
}
void juedou(int a,int b){
if(pig[b].brightstatus==1||pig[b].brightstatus==2){
pig[a].brightstatus=3;
leifan[a]=0;
}
if(pig[b].brightstatus==3&&pig[a].brightstatus!=1){
pig[a].brightstatus=2;
leifan[a]=0;
}
bool g=0;
if(pig[b].brightstatus!=0){
bool wx=wuxie(b,0);
while(wx){
g=!g;
wx=wuxie(b,g);
}
}
if(g){
return;
}
else{
if(pig[a].status==1&&pig[b].status==2){
pig[b].blood--;
pig[b].lastp=a;
if(pig[b].blood<=0) binsi(b);
}
else{
bool who=1;
while(1){
if(who==0){
bool flag=0;
for(int i=1;i<=pig[a].cardcnt;i++){
if(pig[a].card[i]=='K'){
pig[a].card.erase(i,1);
pig[a].cardcnt--;
who=1;
flag=1;
break;
}
}
if(!flag){
pig[a].blood--;
pig[a].lastp=b;
if(pig[a].blood<=0){
binsi(a);
if(gameend) return;
}
return;
}
}
else{
bool flag=0;
for(int i=1;i<=pig[b].cardcnt;i++){
if(pig[b].card[i]=='K'){
pig[b].card.erase(i,1);
pig[b].cardcnt--;
who=0;
flag=1;
break;
}
}
if(!flag){
pig[b].blood--;
pig[b].lastp=a;
if(pig[b].blood<=0){
binsi(b);
if(gameend) return;
}
return;
}
}
}
}
}
}
void sha(int a,int b){
if(pig[b].brightstatus==1||pig[b].brightstatus==2){
pig[a].brightstatus=3;
leifan[a]=0;
}
if(pig[b].brightstatus==3&&pig[a].brightstatus!=1){
pig[a].brightstatus=2;
leifan[a]=0;
}
for(int i=1;i<=pig[b].cardcnt;i++){
if(pig[b].card[i]=='D'){
pig[b].card.erase(i,1);
pig[b].cardcnt--;
return;
}
}
pig[b].blood--;
pig[b].lastp=a;
if(pig[b].blood<=0){
binsi(b);
if(gameend) return;
}
}
void peach(int x){
pig[x].blood++;
}
void huihe(int x){
bool useK=0;
getcard(x,2);
for(int i=1;i<=pig[x].cardcnt;i++){
if(gameend) return;
if(pig[x].card[i]=='K'){
if(useK&&pig[x].zgln==0) continue;
if(pig[pig[x].beside].brightstatus!=0){
if(pig[pig[x].beside].brightstatus==1||pig[pig[x].beside].brightstatus==2){
if(pig[x].status==3){
pig[x].card.erase(i,1);
pig[x].cardcnt--;
i--;
sha(x,pig[x].beside);
useK=1;
}
}
if(pig[pig[x].beside].brightstatus==3){
if(pig[x].status==1||pig[x].status==2){
pig[x].card.erase(i,1);pig[x].cardcnt--;
i--;
sha(x,pig[x].beside);
useK=1;
}
}
}
if(pig[x].status==1&&leifan[pig[x].beside]){
pig[x].card.erase(i,1);pig[x].cardcnt--;
i--;
sha(x,pig[x].beside);
}
continue;
}
if(pig[x].card[i]=='P'&&pig[x].blood<4){
peach(x);pig[x].card.erase(i,1);pig[x].cardcnt--;
i--;
continue;
}
if(pig[x].card[i]=='F'){
int j=x;
for(int cnt=1;cnt<n;cnt++){
j++;
if(pig[j].dead) continue;
if(j>n) j=1;
if(pig[x].status==1){
if(pig[j].brightstatus==3||leifan[j]){
pig[x].card.erase(i,1);pig[x].cardcnt--;
juedou(x,j);
if(pig[x].dead) return;
cnt=n+1;
i--;
}
}
if(pig[x].status==2){
if(pig[j].brightstatus==3){
pig[x].card.erase(i,1);pig[x].cardcnt--;
juedou(x,j);
if(pig[x].dead) return;
cnt=n+1;
i--;
}
}
if(pig[x].status==3){
pig[x].card.erase(i,1);pig[x].cardcnt--;
juedou(x,1);
if(pig[x].dead) return;
cnt=n+1;
i--;
}
}
continue;
}
if(pig[x].card[i]=='N'){
pig[x].card.erase(i,1);
pig[x].cardcnt--;
nanwan(x,0);
i--;
continue;
}
if(pig[x].card[i]=='W'){
pig[x].card.erase(i,1);pig[x].cardcnt--;
nanwan(x,1);
i--;
continue;
}
if(pig[x].card[i]=='Z'){
pig[x].card.erase(i,1);pig[x].cardcnt--;
pig[x].zgln=1;
i=1;
}
if(gameend) return;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
pig[i].card+='0';
string s;
cin>>s;
if(s=="MP") pig[i].status=1;
if(s=="ZP") pig[i].status=2;
if(s=="FP") pig[i].status=3,f++;
string s1;
getline(cin,s1);
pig[i].card+=s1[1];
pig[i].card+=s1[3];
pig[i].card+=s1[5];
pig[i].card+=s1[7];
pig[i].cardcnt=4;
pig[i].blood=4;
if(i==n){
pig[i].beside=1;
}
else{
pig[i].beside=i+1;
}
}
pig[1].brightstatus=1;
for(int i=1;i<=m;i++){
char c;
cin>>c;
cardq.push(c);
if(i==m) lastcard=c;
}
while(!gameend){
now++;
if(now>n){
now=1;
}
if(pig[now].dead==0) huihe(now);
}
}