# Day 1 (2020.04.17)

void input()
{
scanf("%d%d", &n, &m)
for(int i=1;i<=n;i++)
{
if(tmp == 'F') ++fp, p[i] = Pig(i%n+1, 2)
else if(tmp == 'Z') p[i] = Pig(i%n+1, 1)
else p[i] = Pig(i%n+1, 0)
for(int j=1;j<=4;j++) p[i].cards[j] = read()
}
p[1].pf = 1
}

# Day 2 (2020.04.29) 视频

void get_card(int cur)
{
p[cur].cards[p[cur].cnt] = cs.front()
if(cs.size() > 1) cs.pop_front()
}

bool test(int cur)
{
int nxt = p[cur].nxt
if(p[nxt].pf == 0) return 0
else if(p[nxt].pf == 1) return diff[p[cur].id][p[nxt].id]
else return p[cur].id = 0
}

# Day 3 (2020.04.30) 视频

int attack(int cur)
{
if(p[cur].id == 2) return 1
for(int nxt=p[cur].nxt nxt!=cur nxt=p[nxt].nxt)
{
if((p[nxt].id == 2 && p[nxt].pf == 1) || (p[nxt].id == 0 && p[nxt].pf == -1))
{
return nxt
}
}
return -1
}

# Day 4-1 (2020.05.24)

void pend(int u, int v) {
if(!p[u].id && p[v].id == 1) {
for(int i=1;i<=p[u].cnt;i++) used[i] = rnds
p[u].eq = 0
}
else if(p[v].id == 2) {
for(int i=1 i<=3 i++) get_card(u)
}
}
int find(int u, char c) {
for(int i=1 i<=p[u].cnt i++) if(p[u].cards[i] == c) return i
return 0
}
void remove(int u, int a, int b) {
for(int i=a i<b i++) p[u].cards[i] = p[u].cards[i+1]
}
void peach(int u, int v) {
int t = find(u, 'P')
if(u == v) {
t = 0
for(int i=1 i<=p[u].cnt i++) {
if(used[i] != rnds && p[u].cards[i] == 'P') {
t = i
break
}
}
if(t) {
used[t] = rnds
++p[u].hp
}
return
}
if(t) {
++p[u].hp
remove(u, t, p[u].cnt)
--p[u].cnt
}
}
bool dodge(int u) {
int t = find(u, 'D')
if(t) {
remove(u, t, p[u].cnt)
--p[u].cnt
}
return t
}
bool kill(int u, int v) {
int t = find(u, 'K')
if(u == v) {
t = 0
for(int i=1 i<=p[u].cnt i++) {
if(used[i] != rnds && p[u].cards[i] == 'K') {
t = i
break
}
}
if(t) used[t] = rnds
return t
}
if(t) {
remove(u, t, p[u].cnt)
--p[u].cnt
}
return t
}
bool wuxie(int u, int v) {
int t = find(u, 'J')
if(u == v) {
t = 0
for(int i=1 i<=p[u].cnt i++) {
if(used[i] != rnds && p[u].cards[i] == 'J') {
t = i
break
}
}
if(t) used[t] = rnds
return t
}
if(t) {
remove(u, t, p[u].cnt)
--p[u].cnt
}
return t
}
void lose_blood(int u, int v) {
--p[u].hp
if(p[u].hp < 1) peach(u, v)
}
void modify(int u) {
for(int i=1 i<=n i++) {
if(!p[i].dead && p[i].nxt == u) {
p[i].nxt = p[u].nxt
break
}
}
}
void do_peach(int u) {
++p[u].hp
}
void do_kill(int u) {
int v = p[u].nxt
p[u].pf = 1
if(!dodge(v)) {
lose_blood(v, u)
if(p[v].hp < 1) {
if(p[v].id == 2) ++fpdead
p[u].nxt = p[v].nxt
}
if(p[v].hp < 1) pend(u, v)
}
}
bool do_wuxie(int v, int u, int c, int w) {
bool res = w;
for(int t=u  ) {
if(!w) {
if(!diff[p[t].id][p[c].id]) {
if(wuxie(t, v)) {
p[t].pf = 1
return do_wuxie(v, t, c, 1-w)
}
}
}
else {
if(diff[p[t].id][p[c].id]) {
if(wuxie(t, v)) {
p[t].pf = 1
return do_wuxie(v, t, c, 1-w)
}
}
}
}
}
return res
}

# Day 4-2 (2020.05.24)

void do_fight(int u, int c, int v) {
p[u].pf = 1
if(p[c].pf == 1) {
if(do_wuxie(u, u, c, 0)) return
}
while(true) {
if(!p[u].id && p[c].id == 1) {
lose_blood(c, v)
if(p[c].hp < 1) {
if(p[c].id == 2) {
}
modify(c)
}
if(p[c].hp < 1) pend(u, c)
return
}
else if(!kill(c, v)) {
lose_blood(c, v)
if(p[c].hp < 1) {
if(p[c].id == 2) {
}
modify(c)
}
if(p[c].hp < 1) pend(u, c)
return
}
if (!kill(u, v)) {
lose_blood(u, v)
if(p[u].hp < 1) {
if(p[u].id == 2) {
}
modify(u)
}
if(p[u].hp < 1) pend(c, u)
return
}
}
}