#include<bits/stdc++.h>
using namespace std;
const int maxn=10;
/*------------------------------------------------------------------------------------------------------*/
//角色操作
struct Pig{
string card;
int last,next;
int hp;
char charactor;
int is_dead,show,be_think;
bool pig_bro;
Pig(){
hp=4,is_dead=0,show=0,be_think=0,pig_bro=0;
}
}pig[maxn];
int n,m,result;
string all;
void getcard(int u,int sum){
while(sum--){
pig[u].card+=all[0];
all.erase(0,1);
}
}
void no_card(int u){
pig[u].card="";
pig[u].pig_bro=0;
}
void find_peach(int u){
int pos=pig[u].card.find('P');
if(pos!=-1){
pig[u].hp++;
pig[u].card.erase(pos,1);
}
}
void lose_hp(int u,int killer){
pig[u].hp--;
if(pig[u].hp==0) find_peach(u);
if(pig[u].hp==0){
pig[u].is_dead=1;
pig[pig[u].last].next=pig[u].next;
pig[pig[u].next].last=pig[u].last;
if(pig[u].charactor=='F'){
getcard(killer,3);
}
if(pig[u].charactor=='Z'&&pig[killer].charactor=='M'){
no_card(killer);
}
}
}
/*------------------------------------------------------------------------------------------------------*/
//基础操作
int run(int u,char c,int killer){ //闪
int pos=pig[u].card.find(c);
if(pos==-1){
lose_hp(u,killer);
return 0;
}
else{
pig[u].card.erase(pos,1);
return 1;
}
}
int kill(int u,int v,int pos){ //u有机会对v出杀
if( ((pig[u].charactor=='M'||pig[u].charactor=='Z') && (pig[v].charactor=='F') && (pig[v].show)) || (pig[u].charactor=='M'&&pig[v].be_think==1) || ( pig[u].charactor=='F' && ( pig[v].charactor=='M'|| (pig[v].charactor=='Z'&&pig[v].show) ) ) ){
pig[u].show=1;pig[u].be_think=0;
pig[u].card.erase(pos,1);
bool sb=run(v,'D',u);
return 1;
}
return 0;
}
int peach(int u,int pos){
if(pig[u].hp!=4){
pig[u].hp++;
pig[u].card.erase(pos,1);
return 1;
}
return 0;
}
/*------------------------------------------------------------------------------------------------------*/
//锦囊妙计
int no_relaxation_for_you_to_attack(int u,int beuseder,int killer){
bool good=(pig[beuseder].charactor=='M'||pig[beuseder].charactor=='Z'&&pig[beuseder].show==1);
bool bad=(pig[beuseder].charactor=='F'&&pig[beuseder].show==1);
int v=u,tag=0;
bool res=0;
for(;;v=pig[v].next){
if(v==u){
if(tag) break;
tag=1;
}
if( ((pig[v].charactor=='M'||pig[v].charactor=='Z')&&good) || (pig[v].charactor=='F'&&bad) ){
int pos=pig[v].card.find('J');
if(pos!=-1&&res==0){
pig[v].card.erase(pos,1);
pig[v].show=1;
res^=no_relaxation_for_you_to_attack(u,killer,beuseder);
}
}
}
return res;
}
void south_pigs_comming_to_kill_you(int u,int killer){
if(u==killer) return;
if(no_relaxation_for_you_to_attack(killer,u,killer)) south_pigs_comming_to_kill_you(pig[u].next,killer);
bool sb=run(u,'K',killer);
if(u==0&&sb==0) pig[killer].be_think=1;
south_pigs_comming_to_kill_you(pig[u].next,killer);
}
void thousands_of_arrows_shoot_together(int u,int killer){
if(u==killer) return;
if(no_relaxation_for_you_to_attack(killer,u,killer)) south_pigs_comming_to_kill_you(pig[u].next,killer);
bool sb=run(u,'D',killer);
if(u==0&&sb==0) pig[killer].be_think=1;
south_pigs_comming_to_kill_you(pig[u].next,killer);
}
void I_kill_you_and_you_kill_me_mxbc_tianmimi(int u,int killer){
//cout<<"juedou*1\n";
if(killer==0&&pig[u].charactor=='Z'){
lose_hp(u,killer);
return;
}
bool sb=run(u,'D',killer);
if(sb){
south_pigs_comming_to_kill_you(killer,u);
}
}
/*------------------------------------------------------------------------------------------------------*/
//全局操作
int gameover(){
if(pig[0].is_dead){
result=-1;return 1;
}
int u=pig[0].next;
for(;u;u=pig[u].next){
if(pig[u].charactor=='F') return 0;
}
result=1;
return 1;
}
void huihe(int p){
//cout<<p<<"'s turn,it's "<<pig[p].charactor<<" pig,hp "<<pig[p].hp<<" like fan "<<pig[p].be_think<<"\n";
if(gameover()) return;
getcard(p,2);
int ctnue=1,usekill=0;
while(ctnue&&!pig[p].is_dead){ //操作了就持续循环
ctnue=0;
for(int i=0;i<pig[p].card.size();i++){
char now=pig[p].card[i];
if(now=='K'&&(pig[p].pig_bro||!usekill)){
if(kill(p,pig[p].next,i)){
usekill=1;
ctnue=1;
break;
}
}
else if(now=='P'){
if(peach(p,i)){
ctnue=1;
break;
}
}
else if(now=='N'){
pig[p].card.erase(i,1);ctnue=1;
south_pigs_comming_to_kill_you(pig[p].next,p);
}
else if(now=='W'){
pig[p].card.erase(i,1);ctnue=1;
thousands_of_arrows_shoot_together(pig[p].next,p);
}
else if(now=='F'){
if(pig[p].charactor=='F'){
pig[p].card.erase(i,1);pig[p].show=1;pig[p].be_think=0;
if(!no_relaxation_for_you_to_attack(p,0,p)) I_kill_you_and_you_kill_me_mxbc_tianmimi(0,p);
ctnue=1;break;
}
else if(pig[p].charactor=='Z'){
int v=pig[p].next,have_use=0;
for(;v;v=pig[v].next){
if(pig[v].charactor=='F'&&pig[v].show==1){
pig[p].card.erase(i,1);pig[p].show=1;pig[p].be_think=0;
if(!no_relaxation_for_you_to_attack(p,v,p)) I_kill_you_and_you_kill_me_mxbc_tianmimi(v,p);
break;
}
}
if(have_use){
ctnue=1;break;
}
}
else{
//cout<<"zunbei "<<i<<"\n";
int v=pig[p].next,have_use=0;
for(;v;v=pig[v].next){
if((pig[v].charactor=='F'&&pig[v].show)||pig[v].be_think){
pig[p].card.erase(i,1);pig[p].be_think=0;
if(!no_relaxation_for_you_to_attack(p,v,p)) I_kill_you_and_you_kill_me_mxbc_tianmimi(v,p);
have_use=1;
break;
}
}
if(have_use){
ctnue=1;break;
}
}
}
else if(now=='Z'){
pig[p].card.erase(i,1);
pig[p].pig_bro=1;ctnue=1;
}
}
}
huihe(pig[p].next);
}
/*------------------------------------------------------------------------------------------------------*/
signed main(){
ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
cin>>n>>m;
char c;
for(int i=0;i<n;i++){
pig[i].last=(i-1+n)%n;
pig[i].next=(i+1+n)%n;
cin>>pig[i].charactor;
cin>>c;
for(int j=1;j<=4;j++) cin>>c,pig[i].card+=c;
}
for(int i=1;i<=m;i++){
cin>>c;
all+=c;
}
for(int i=1;i<=2000;i++) all+=c;
huihe(0);
if(result==1){
cout<<"MP\n";
}
else{
cout<<"FP\n";
}
for(int i=0;i<n;i++){
if(pig[i].is_dead) cout<<"DEAD\n";
else{
for(auto c:pig[i].card) cout<<c<<" ";
cout<<"\n";
}
}
}