#include <bits/stdc++.h>
using namespace std;
struct player
{
string actor;
char armor;
int hp, sha, shan, tao, nanman, wanjian, zhuge, wuxie, juedou;
string known[1005];
bool alive;
}p[1005];
int n, card, fnum, now, cnow = 1;
char a[1005];
void solve(char c, int i)
{
if(c == 'K')p[i].sha++;
else if(c == 'D')p[i].shan++;
else if(c == 'P')p[i].tao++;
else if(c == 'N')p[i].nanman++;
else if(c == 'W')p[i].wanjian++;
else if(c == 'J')p[i].wuxie++;
else if(c == 'Z')p[i].zhuge++;
else if(c == 'F')p[i].juedou++;
}
void zero(int i)
{
p[i].armor = '#';
p[i].sha = 0;
p[i].shan = 0;
p[i].tao = 0;
p[i].nanman = 0;
p[i].wanjian = 0;
p[i].zhuge = 0;
p[i].wuxie = 0;
p[i].juedou = 0;
}
void willdie(int i)
{
for(int j = 1; j <= n; j++)
{
if(i == j && p[i].tao != 0)
{
p[i].tao--;
p[i].hp++;
}
else if(p[i].actor == "MP" && p[j].actor == "ZP")
{
p[j].tao--;
p[i].hp++;
for(int k = 1; k <= n; k++)
{
p[k].known[now] = "ZP";
}
}
else if(p[j].known[i] == "FP" && p[j].actor == "FP")
{
p[j].tao--;
p[i].hp++;
for(int k = 1; k <= n; k++)
{
p[k].known[j] = "FP";
}
}
}
if(p[i].hp == 0)
{
p[i].alive = 0;
if(p[1].alive == 0)
{
cout << "FP\n";
for(int x = 1; x <= n; x++)
{
if(p[x].alive == 1)
{
for(int y = 1; y <= p[x].sha; y++)cout << 'K' << " ";
for(int y = 1; y <= p[x].shan; y++)cout << 'D' << " ";
for(int y = 1; y <= p[x].tao; y++)cout << 'T' << " ";
for(int y = 1; y <= p[x].nanman; y++)cout << 'N' << " ";
for(int y = 1; y <= p[x].wanjian; y++)cout << 'W' << " ";
for(int y = 1; y <= p[x].wuxie; y++)cout << 'J' << " ";
for(int y = 1; y <= p[x].zhuge; y++)cout << 'Z' << " ";
for(int y = 1; y <= p[x].juedou; y++)cout << 'F' << " ";
}
else cout << "DEAD";
cout << endl;
}
exit(0);
}
if(p[i].actor == "ZP" && p[now].actor == "MP")
{
zero(now);
}
else if(p[i].actor == "FP")
{
fnum--;
if(fnum == 0)
{
cout << "MP\n";
for(int x = 1; x <= n; x++)
{
if(p[x].alive == 1)
{
for(int y = 1; y <= p[x].sha; y++)cout << 'K' << " ";
for(int y = 1; y <= p[x].shan; y++)cout << 'D' << " ";
for(int y = 1; y <= p[x].tao; y++)cout << 'T' << " ";
for(int y = 1; y <= p[x].nanman; y++)cout << 'N' << " ";
for(int y = 1; y <= p[x].wanjian; y++)cout << 'W' << " ";
for(int y = 1; y <= p[x].wuxie; y++)cout << 'J' << " ";
for(int y = 1; y <= p[x].zhuge; y++)cout << 'Z' << " ";
for(int y = 1; y <= p[x].juedou; y++)cout << 'F' << " ";
}
else cout << "DEAD";
cout << endl;
}
exit(0);
}
solve(a[cnow], now);
if(cnow != n)cnow++;
solve(a[cnow], now);
if(cnow != n)cnow++;
solve(a[cnow], now);
if(cnow != n)cnow++;
}
}
}
void nanman(int now)
{
if(p[now].nanman != 0)
{
p[now].nanman--;
while(p[now].nanman != 0)
{
for(int i = 1; i < now; i++)
{
if(p[i].alive == 0)continue;
bool need = 1;
for(int j = 1; j <= n; j++)
{
if(p[j].alive == 1)
{
if(p[j].known[i] == "FP" && p[j].actor == "FP")
{
p[j].wuxie--;
need = 0;
for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
}
}
}
if(need)
{
if(p[i].sha != 0)p[i].sha--;
else p[i].hp--;
if(p[i].hp == 0)
{
willdie(i);
}
}
}
for(int i = now + 1; i <= n; i++)
{
if(p[i].alive == 0)continue;
bool need = 1;
for(int j = 1; j <= n; j++)
{
if(p[j].alive == 1)
{
if(p[j].known[i] == "FP" && p[j].actor == "FP")
{
p[j].wuxie--;
need = 0;
for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
}
}
}
if(need)
{
if(p[i].sha != 0)p[i].sha--;
else p[i].hp--;
if(p[i].hp == 0)
{
willdie(i);
}
}
}
}
while(p[now].wanjian != 0)
{
p[now].wanjian--;
for(int i = 1; i < now; i++)
{
if(p[i].alive == 0)continue;
bool need = 1;
for(int j = 1; j <= n; j++)
{
if(p[j].alive == 1)
{
if(p[j].known[i] == "FP" && p[j].actor == "FP")
{
p[j].wuxie--;
need = 0;
for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
}
}
}
if(need)
{
if(p[i].shan != 0)p[i].shan--;
else p[i].hp--;
if(p[i].hp == 0)
{
willdie(i);
}
}
}
for(int i = now + 1; i <= n; i++)
{
if(p[i].alive == 0)continue;
bool need = 1;
for(int j = 1; j <= n; j++)
{
if(p[j].alive == 1)
{
if(p[j].known[i] == "FP" && p[j].actor == "FP")
{
p[j].wuxie--;
need = 0;
for(int k = 1; k <= n; i++)p[k].known[j] == "FP";
}
}
}
if(need)
{
if(p[i].shan != 0)p[i].shan--;
else p[i].hp--;
if(p[i].hp == 0)
{
willdie(i);
}
}
}
}
}
}
int main()
{
cin >> n >> card;
now = 0;
for(int i = 1; i <= n; i++)
{
cin >> p[i].actor;
if(p[i].actor == "FP")fnum++;
for(int j = 1; j <= 4; j++)
{
char c;
cin >> c;
solve(c, i);
}
p[i].alive = 1;
p[i].hp = 4;
p[i].armor = '#';
}
for(int i = 1; i <= card; i++)
{
cin >> a[i];
}
for(int i = 1; i <= n; i++)p[i].known[1] = "MP";
while(1)
{
if(now == n)now = 1;
else now++;
if(p[now].alive == 0)
{
continue;
}
solve(a[cnow], now);
if(cnow != n)cnow++;
solve(a[cnow], now);
if(cnow != n)cnow++;
int prev, next;
if(now == 1)prev = n;
else prev = now - 1;
while(p[prev].alive == 0)
{
if(now == 1)prev = n;
else prev = now - 1;
}
if(now == n)next = 1;
else next = now + 1;
while(p[next].alive == 0)
{
if(now == n)next = 1;
else next = now + 1;
}
if(p[now].zhuge != 0)
{
while(p[now].zhuge != 0)
{
p[now].armor = 'Z';
p[now].zhuge--;
}
}
while(p[now].hp < 4 && p[now].tao != 0)
{
p[now].hp++;
p[now].tao--;
}
nanman(now);
if(p[now].actor == "MP")
{
int limit = 1;
if(p[now].armor == 'Z')limit = 999999;
if(p[now].known[next] == "FP")
{
while(limit && p[now].sha)
{
p[now].sha--;
limit--;
if(p[next].shan != 0)p[next].shan--;
else p[next].hp--;
if(p[next].hp == 0)willdie(next);
}
}
if(p[now].known[prev] == "FP")
{
while(limit && p[now].sha)
{
p[now].sha--;
limit--;
if(p[prev].shan != 0)p[prev].shan--;
else p[prev].hp--;
if(p[prev].hp == 0)willdie(prev);
}
}
}
if(p[now].actor == "ZP")
{
int limit = 1;
if(p[now].armor == 'Z')limit = 999999;
if(p[now].known[next] == "FP")
{
while(limit && p[now].sha)
{
p[now].sha--;
limit--;
if(p[next].shan != 0)p[next].shan--;
else p[next].hp--;
if(p[next].hp == 0)willdie(next);
}
}
if(p[now].known[prev] == "FP")
{
while(limit && p[now].sha)
{
p[now].sha--;
limit--;
if(p[prev].shan != 0)p[prev].shan--;
else p[prev].hp--;
if(p[prev].hp == 0)willdie(prev);
}
}
}
if(p[now].actor == "FP")
{
int limit = 1, hurt = 0;
if(p[now].armor == 'Z')limit = 999999;
if(p[prev].actor == "MP")hurt = prev;
else if(p[next].actor == "MP")hurt = next;
else if(p[next].actor == "ZP")hurt = next;
else if(p[prev].actor == "ZP")hurt = prev;
if(hurt)
{
while(limit && p[now].sha)
{
p[now].sha--;
limit--;
if(p[hurt].shan != 0)p[hurt].shan--;
else p[hurt].hp--;
if(p[hurt].hp == 0)willdie(hurt);
}
}
}
}
return 0;
}