#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define fr first
#define se second
#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
int n,m,fz,s=1;
bool ed;
char pd[2005],last;
/*
基本牌
P:桃
K:杀
D:闪
锦囊牌
F:决斗
N:南猪入侵
W:万箭齐发
J:无懈可击
装备牌
Z:猪葛连弩
*/
struct node{//猪的结构体
char id,a[2005];
int cnt,pre,next,tl;
bool zb;
}pig[15];
char uid[15];
void init(){//初始化
cin>>n>>m;
char s[15];
for(int i=1;i<=n;i++){
for(int j=0;j<=2004;j++){
pig[i].a[j]='@';
}
uid[i]='?';
pig[i].next=i+1;
pig[i].pre=i-1;
}
pig[n].next=1;
pig[1].pre=n;//距离&手牌
for(int i=1;i<=n;i++){
pig[i].tl=4;
cin>>s;
pig[i].id=s[0];
if(pig[i].id='M') uid[i]='M';
for(int u=1;u<=4;u++){
cin>>s;
pig[i].a[++pig[i].cnt]=s[0];
}
}
for(int i=1;i<=m;i++){
cin>>s;
pd[i]=s[0];
}
last=pd[m];
}
void mp(int v){//摸排
if(m==s) pig[v].a[++pig[v].cnt]=last;
pig[v].a[++pig[v].cnt]=pd[s++];
}
void die(int x,int y){//死亡处理,x-杀人者,y-死亡者
for(int j=1;j<=pig[y].cnt;j++){
if(pig[y].a[j]=='P'){
pig[y].a[j]='@';
pig[y].tl=1;
return;
}
}
pig[pig[y].pre].next=pig[y].next;
pig[pig[y].next].pre=pig[y].pre;
if(pig[y].id=='M'){
cout<<"FP\n";
ed=1;
return;
}
if(pig[y].id=='F'){
fz--;
if(fz==0){
cout<<"MP\n";
ed=1;
return;
}
for(int i=1;i<=3;i++) mp(x);
}
if(pig[y].id=='Z'&&pig[x].id=='M'){
for(int i=1;i<=pig[x].cnt;i++){
pig[x].a[i]='@';
}
pig[x].zb=0;
}
}
bool K(int x,int y){//杀,x-出杀者,y-被杀者
if(pig[x].id=='M'){
if(uid[y]=='F'||uid[y]=='L'){
for(int i=1;i<=pig[y].cnt;i++){
if(pig[y].a[i]=='D'){
pig[y].a[i]='@';
return 1;
}
}
pig[y].tl--;
return 1;
}
else return 0;
}
if(pig[x].id=='Z'){
if(uid[y]=='F'){
for(int i=1;i<=pig[y].cnt;i++){
if(pig[y].a[i]=='D'){
pig[y].a[i]='@';
return 1;
}
}
pig[y].tl--;
uid[x]='Z';
return 1;
}
else return 0;
}
if(pig[x].id=='F'){
if(uid[y]=='Z'||uid[y]=='M'){
for(int i=1;i<=pig[y].cnt;i++){
if(pig[y].a[i]=='D'){
pig[y].a[i]='@';
return 1;
}
}
pig[y].tl--;
uid[x]='F';
return 1;
}
else return 0;
}
}
void play(){//game
int t=1;
while(t++){
int i=t%n;
if(i==0) i=n;
bool k=0;
for(int j=1;j<=pig[i].cnt;j++){
if(pig[i].a[j]=='K'){
pig[i].a[j]='@';
k=K(i,pig[i].next);
die(i,pig[i].next);
if(ed) return;
if(pig[i].zb==1) k=1;
}
if(pig[i].a[j]=='P'){
pig[i].a[j]='@';
pig[i].tl++;
}
if(pig[i].a[j]=='Z'){
pig[i].a[j]='@';
pig[i].zb=1;
k=0;
j=1;
}
}
}
}
void print(){
for(int i=1;i<n;i++){
if(pig[i].tl==0){
cout<<"DEAD\n";
}
else{
bool have=0;
for(int j=1;j<=pig[i].cnt;j++){
if(pig[i].a[j]!='@'){
have=1;
break;
}
}
if(have){
cout<<" "<<"\n";
}
else{
for(int j=1;j<=pig[i].cnt;i++){
if(pig[i].a[j]!='@'){
cout<<pig[i].a[j];
}
if(j==pig[i].cnt){
cout<<"\n";
}
else{
cout<<" ";
}
}
}
}
}
}
int main(){
init();
play();
print();
return 0;
}