#include<bits/stdc++.h>
using namespace std;
const int MAXN = 3e3 + 1;
int six_id;
int feel_six_pig[MAXN];
int ide[MAXN];
int n, m;
vector<char> cards;
set<pair<int, char>> st[MAXN];
bool weapon[MAXN];
map<char, int> pigs_card[MAXN];
int pigs_hp[MAXN];
int pigs_len[MAXN];
int pigs_type[MAXN];
vector<pair<int, char>> tmp;
bool all = false;
void print();
bool offset(int x, bool help);
void check_demage(int x, int y, bool all) {
if(pigs_hp[x] == 0) {
if(pigs_card[x]['P']) {
pigs_card[x]['P']--;
pigs_hp[x]++;
pair<int, char> now;
for(auto i : st[x]) {
if(i.second == 'P') {
now = i;
break;
}
}
st[x].erase(now);
}
}
if(pigs_hp[x] == 0) {
if(pigs_type[x] == 1) {
for(int i = 0; i < tmp.size(); i++) {
st[y].erase(tmp[i]);
}
print();
}
int bad = 0;
for(int i = 1; i <= n; i++) {
bad += (pigs_type[i] == 3 && pigs_hp[i] > 0);
}
if(bad == 0) {
for(int i = 0; i < tmp.size(); i++) {
st[y].erase(tmp[i]);
}
print();
}
if(pigs_type[y] == 1 && pigs_type[x] == 2) {
pigs_card[y].clear();
st[y].clear();
}
if(pigs_type[x] == 3) {
for(int i = 1; i <= 3; i++) {
pigs_card[x][cards[cards.size() - 1]]++;
st[y].insert({++pigs_len[y], cards[cards.size() - 1]});
cards.pop_back();
}
}
}
else {
if(all) {
return;
}
if(pigs_type[x] == 1) {
ide[y] = 3;
ide[1] = 1;
feel_six_pig[y] = 1;
}
if(pigs_type[x] == 2) {
ide[y] = 3;
ide[1] = 1;
}
if(pigs_type[x] == 3) {
ide[y] = (y == six_id ? 1 : 2);
}
}
return;
}
void Fight(int x, int y) {
if(offset(y, true)) {
return;
}
bool turn = true;
if(pigs_type[y] == 2 && pigs_type[x] == 1) {
pigs_hp[y]--;
check_demage(y, x, true);
return;
}
while(1) {
if(turn == true) {
if(pigs_card[y]['K'] <= 0) {
break;
}
else {
pigs_card[y]['K']--;
pair<int, char> now;
for(auto i : st[y]) {
if(i.second == 'K') {
now = i;
break;
}
}
st[y].erase(now);
}
}
else {
if(pigs_card[x]['K'] <= 0) {
break;
}
else {
pigs_card[x]['K']--;
pair<int, char> now;
for(auto i : st[x]) {
if(i.second == 'K') {
now = i;
break;
}
}
st[x].erase(now);
}
}
turn = !turn;
}
if(turn) {
pigs_hp[y]--;
check_demage(y, x, true);
}
else {
pigs_hp[x]--;
check_demage(x, y, false);
}
return;
}
bool offset(int x, bool help) {
int type_now = ide[x];
int now = x % n + 1;
if(type_now == 0) {
return false;
}
if(ide[x] && pigs_card[x]['J'] && help) {
pigs_card[x]['J']--;
return offset(x, !help);
}
while(now != x) {
if(pigs_card[now]['J'] && ide[now]) {
if((type_now == 1 || type_now == 2) && help && (pigs_type[x] == 1 || pigs_type[x] == 2)) {
ide[now] = (now == six_id ? 1 : 2);
pigs_card[now]['J']--;
pair<int, char> Now;
for(auto i : st[now]) {
if(i.second == 'J') {
Now = i;
break;
}
}
st[now].erase(Now);
return offset(now, !help);
}
if((type_now == 1 || type_now == 2) && !help && pigs_type[x] == 3) {
ide[now] = 3;
pigs_card[now]['J']--;
pair<int, char> Now;
for(auto i : st[now]) {
if(i.second == 'J') {
Now = i;
break;
}
}
st[now].erase(Now);
return offset(now, !help);
}
if(type_now == 3 && !help && (pigs_type[x] == 1 || pigs_type[x] == 2)) {
ide[now] = (now == six_id ? 1 : 2);
pigs_card[now]['J']--;
pair<int, char> Now;
for(auto i : st[now]) {
if(i.second == 'J') {
Now = i;
break;
}
}
st[now].erase(Now);
return offset(now, !help);
}
if(type_now == 3 && help && pigs_type[x] == 3) {
ide[now] = -1;
pigs_card[now]['J']--;
pair<int, char> Now;
for(auto i : st[now]) {
if(i.second == 'J') {
Now = i;
break;
}
}
st[now].erase(Now);
return offset(now, !help);
}
}
now = now % n + 1;
}
return false;
}
void Shoot(int x) {
for(int i = x + 1; i <= n; i++) {
if(offset(i, true)) {
continue;
}
if(!pigs_card[i]['D']) {
pigs_hp[i]--;
check_demage(i, x, false);
}
else {
pigs_card[i]['D']--;
pair<int, char> now;
for(auto j : st[i]) {
if(j.second == 'D') {
now = j;
break;
}
}
st[i].erase(now);
}
}
for(int i = 1; i < x; i++) {
if(offset(i, true)) {
continue;
}
if(!pigs_card[i]['D']) {
pigs_hp[i]--;
check_demage(i, x, false);
}
else {
pigs_card[i]['D']--;
pair<int, char> now;
for(auto j : st[i]) {
if(j.second == 'D') {
now = j;
break;
}
}
st[i].erase(now);
}
}
return;
}
void male_pig(int x) {
for(int i = x + 1; i <= n; i++) {
if(offset(i, true)) {
continue;
}
if(!pigs_card[i]['K']) {
pigs_hp[i]--;
check_demage(i, x, false);
}
else {
pigs_card[i]['K']--;
pair<int, char> now;
for(auto j : st[i]) {
if(j.second == 'K') {
now = j;
break;
}
}
st[i].erase(now);
}
}
for(int i = 1; i < x; i++) {
if(offset(i, true)) {
continue;
}
if(!pigs_card[i]['K']) {
pigs_hp[i]--;
check_demage(i, x, false);
}
else {
pigs_card[i]['K']--;
pair<int, char> now;
for(auto j : st[i]) {
if(j.second == 'K') {
now = j;
break;
}
}
st[i].erase(now);
}
}
return;
}
void Kill(int x, int y) {
if(pigs_card[y]['D']) {
pigs_card[y]['D']--;
pair<int, char> now;
for(auto i : st[y]) {
if(i.second == 'D') {
now = i;
break;
}
}
st[y].erase(now);
return;
}
else {
pigs_hp[y]--;
check_demage(y, x, true);
}
}
int FFind(int x) {
int now = x % n + 1;
while(now != x) {
if(!pigs_hp[now]) {
now = now % n + 1;
continue;
}
if((pigs_type[x] == 1 || pigs_type[x] == 2) && ide[now] == 3 || pigs_type[x] == 3 && (ide[now] == 1 || ide[now] == 2) || pigs_type[x] == 1 && feel_six_pig[now] == 1) {
return now;
}
now = now % n + 1;
}
return -1;
}
int Find(int x) {
int now = x % n + 1;
while(now != x) {
if(!pigs_hp[now]) {
now = now % n + 1;
continue;
}
if((pigs_type[x] == 1 || pigs_type[x] == 2) && ide[now] == 3 || pigs_type[x] == 3 && (ide[now] == 1 || ide[now] == 2) || pigs_type[x] == 1 && feel_six_pig[now] == 1) {
return now;
}
else {
break;
}
}
return -1;
}
bool check(int x, char c) {
if(c == 'K') {
int now = Find(x);
if(now == -1) {
return false;
}
else {
return true;
}
}
else if(c == 'F') {
if(pigs_type[x] == 3) {
return true;
}
else {
int now = FFind(x);
if(now == -1) {
return false;
}
else {
return true;
}
}
}
else if(c == 'D' || c == 'J') {
return false;
}
else if(c == 'Z') {
return true;
}
else if(c == 'P') {
return pigs_hp[x] < 4;
}
else if(c == 'N') {
return true;
}
else {
return true;
}
}
void use(int x, char c) {
if(c == 'K') {
int now = Find(x);
Kill(x, now);
}
else if(c == 'F') {
if(pigs_type[x] == 3) {
Fight(x, 1);
}
else {
int now = FFind(x);
Fight(x, now);
}
}
else if(c == 'Z') {
weapon[x] = true;
}
else if(c == 'P') {
pigs_hp[x]++;
}
else if(c == 'N') {
male_pig(x);
}
else {
Shoot(x);
}
}
void pigs_round(int x) {
bool Kill_used = false;
tmp.clear();
for(const auto& i : st[x]) {
if(i.second == 'Z') {
weapon[x] = true;
break;
}
}
for(const auto& i : st[x]) {
if(!weapon[x] && Kill_used && i.second == 'K') {
continue;
}
if(check(x, i.second)) {
pigs_card[x][i.second]--;
tmp.push_back(i);
use(x, i.second);
Kill_used |= (i.second == 'K');
}
}
for(int i = 0; i < tmp.size(); i++) {
st[x].erase(tmp[i]);
}
return;
}
void read() {
cin >> n >> m;
for(int i = 1; i <= n; i++) {
string s;
char c;
cin >> s;
if(s == "MP") {
pigs_type[i] = 1;
}
else if(s == "ZP") {
pigs_type[i] = 2;
}
else {
pigs_type[i] = 3;
}
for(int j = 1; j <= 4; j++) {
cin >> c;
st[i].insert({++pigs_len[i], c});
pigs_card[i][c]++;
}
}
char last;
for(int i = 0; i < m; i++) {
char c;
cin >> c;
last = c;
cards.push_back(c);
}
for(int i = 1; i <= 1000; i++) {
cards.push_back(last);
}
reverse(cards.begin(), cards.end());
}
void init() {
fill(pigs_hp + 1, pigs_hp + n + 1, 4);
ide[1] = 1;
}
void start() {
int now = 1;
while(1) {
if(pigs_hp[now] <= 0) {
now = now % n + 1;
continue;
}
char p1 = cards[cards.size() - 1], p2 = cards[cards.size() - 2];
st[now].insert({++pigs_len[now], p1});
st[now].insert({++pigs_len[now], p2});
pigs_card[now][p1]++;
pigs_card[now][p2]++;
cards.pop_back(), cards.pop_back();
pigs_round(now);
now = now % n + 1;
}
}
void print() {
if(pigs_hp[1] <= 0) {
cout << "FP\n";
}
else {
cout << "MP\n";
}
for(int i = 1; i <= n; i++) {
if(pigs_hp[i] > 0) {
for(auto j : st[i]) {
cout << j.second << " ";
}
cout << "\n";
}
else {
cout << "DEAD\n";
}
}
exit(0);
}
int main() {
read();
init();
start();
return 0;
}