#include <bits/stdc++.h>
#define ERROR puts("Invalid command")
#define pc putchar(';')
using namespace std;
int a, b, c, d;
int rcx = 0, rcy = 4, bcx = 9, bcy = 4;
bool who = true, is_over = false;
inline void ps(string s) {
int n = s.length();
for (int i = 0; i < n; i++)
putchar(s[i]);
}
string gra[10][9] = {
{"red car", "red horse", "red elephant", "red guard", "red captain", "red guard", "red elephant", "red horse", "red car"},
{"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA"},
{"red duck", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "red duck"},
{"red soldier", "NA", "red soldier", "NA", "red soldier", "NA", "red soldier", "NA", "red soldier"},
{"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA"},
{"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA"},
{"blue soldier", "NA", "blue soldier", "NA", "blue soldier", "NA", "blue soldier", "NA", "blue soldier"},
{"blue duck", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "blue duck"},
{"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA"},
{"blue car", "blue horse", "blue elephant", "blue guard", "blue captain", "blue guard", "blue elephant", "blue horse","blue car"}
};
inline bool isok(int x, int y) {
return x >= 0 && y >= 0 && x < 10 && y < 9;
}
inline bool can_soldier_go() {
return abs(a - c) <= 1 && abs(b - d) <= 1;
}
inline bool can_guard_go() {
return abs(a - c) == 1 && abs(b - d) == 1;
}
inline bool can_captain_go() {
if ((abs(a - c) == 1 && abs(b - d) == 0) || (abs(a - c) == 0 && abs(b - d) == 1)) {
if (who)
rcx = c, rcy = d;
else
bcx = c, bcy = d;
return true;
}
return false;
}
inline bool can_car_go() {
if (a == c) {
if (b > d) {
for (int j = b - 1; j > d; j--)
if (gra[a][j] != "NA")
return false;
} else {
for (int j = b + 1; j < d; j++)
if (gra[a][j] != "NA")
return false;
}
} else if (b == d) {
if (a > c) {
for (int i = a - 1; a > c; i--)
if (gra[i][b] != "NA")
return false;
} else {
for (int i = a + 1; a < c; i++)
if (gra[i][b] != "NA")
return false;
}
} else
return false;
return true;
}
inline bool can_horse_go() {
if (abs(a - c) == 2 && abs(b - d) == 1) {
if (a > c) {
return gra[a - 1][b] == "NA";
} else {
return gra[a + 1][b] == "NA";
}
}
if (abs(a - c) == 1 && abs(b - d) == 2) {
if (b > d) {
return gra[a][b - 1] == "NA";
} else {
return gra[a][b + 1] == "NA";
}
}
return false;
}
inline bool can_elephant_go() {
if (abs(a - c) == 2 && abs(b - d) == 2) {
if (a > c) {
if (b > d) {
return gra[a - 1][b - 1] == "NA";
} else {
return gra[a - 1][b + 1] == "NA";
}
} else {
if (b > d) {
return gra[a + 1][b - 1] == "NA";
} else {
return gra[a + 1][b + 1] == "NA";
}
}
}
return false;
}
inline bool can_duck_go() {
if (abs(a - c) == 3 && abs(b - d) == 2) {
if (a > c) {
if (b > d) {
return gra[a - 2][b - 1] == "NA" && gra[a - 1][b] == "NA";
} else {
return gra[a - 2][b + 1] == "NA" && gra[a - 1][b] == "NA";
}
} else {
if (b > d) {
return gra[a + 2][b - 1] == "NA" && gra[a + 1][b] == "NA";
} else {
return gra[a + 2][b + 1] == "NA" && gra[a + 1][b] == "NA";
}
}
}
if (abs(a - c) == 2 && abs(b - d) == 3) {
if (b > d) {
if (a > c) {
return gra[a - 1][b - 2] == "NA" && gra[a][b - 1] == "NA";
} else {
return gra[a + 1][b - 2] == "NA" && gra[a][b - 1] == "NA";
}
} else {
if (a > c) {
return gra[a - 1][b + 2] == "NA" && gra[a][b + 1] == "NA";
} else {
return gra[a + 1][b + 2] == "NA" && gra[a][b + 1] == "NA";
}
}
}
return false;
}
inline bool can_it_go() {
if (who) {
if (gra[a][b] == "red car")
return can_car_go();
if (gra[a][b] == "red horse")
return can_horse_go();
if (gra[a][b] == "red elephant")
return can_elephant_go();
if (gra[a][b] == "red duck")
return can_duck_go();
if (gra[a][b] == "red captain")
return can_captain_go();
if (gra[a][b] == "red guard")
return can_guard_go();
return can_soldier_go();
} else {
if (gra[a][b] == "blue car")
return can_car_go();
if (gra[a][b] == "blue horse")
return can_horse_go();
if (gra[a][b] == "blue elephant")
return can_elephant_go();
if (gra[a][b] == "blue duck")
return can_duck_go();
if (gra[a][b] == "blue captain")
return can_captain_go();
if (gra[a][b] == "blue guard")
return can_guard_go();
return can_soldier_go();
}
}
inline string is_checkmate() {
int copy_a = a, copy_b = b, copy_c = c, copy_d = d;
bool copy_who = who;
for (a = 0; a < 10; a++) {
for (b = 0; b < 9; b++) {
if (gra[a][b] != "NA") {
if (gra[a][b][0] == 'r')
c = bcx, d = bcy, who = 1;
else
c = rcx, d = rcy, who = 0;
if (can_it_go())
goto out;
}
}
}
who = copy_who, a = copy_a, b = copy_b, c = copy_c, d = copy_d;
return "no";
out:;
who = copy_who, a = copy_a, b = copy_b, c = copy_c, d = copy_d;
return "yes";
}
int main() {
int Q;
scanf("%d", &Q);
while (Q--) {
scanf("%d%d%d%d", &a, &b, &c, &d);
if (is_over ||
!(isok(a, b) && isok(c, d)) ||
gra[a][b] == "NA" ||
(gra[a][b][0] == 'r' && (gra[c][d][0] == 'r' || !who)) ||
(gra[a][b][0] == 'b' && (gra[c][d][0] == 'b' || who))) {
ERROR;
continue;
}
if (who) {
if (can_it_go()) {
ps(gra[a][b]);
pc;
ps(gra[c][d]);
pc;
if (gra[c][d] == "blue captain")
is_over = true;
gra[c][d] = gra[a][b];
gra[a][b] = "NA";
ps(is_checkmate());
pc;
if (is_over)
puts("yes");
else
puts("no");
} else {
ERROR;
continue;
}
} else {
if (can_it_go()) {
ps(gra[a][b]);
pc;
ps(gra[c][d]);
pc;
if (gra[c][d] == "red captain")
is_over = true;
gra[c][d] = gra[a][b];
gra[a][b] = "NA";
ps(is_checkmate());
pc;
if (is_over)
puts("yes");
else
puts("no");
} else {
ERROR;
continue;
}
}
who = !who;
}
return 0;
}
求调附赠Hack:
54
3 8 4 7
9 2 7 4
3 6 4 5
9 1 8 3
0 7 2 6
6 2 5 3
3 2 4 3
8 3 6 2
4 3 5 3
6 4 5 3
3 4 4 4
5 3 4 2
3 0 4 0
9 0 9 1
0 2 2 4
9 1 2 1
4 7 4 6
6 8 5 8
4 5 5 5
6 6 5 6
4 6 5 6
7 8 5 5
5 6 5 5
5 8 4 8
2 6 3 4
4 2 3 2
0 1 1 3
3 2 2 3
1 3 2 1
2 3 2 4
0 6 2 4
4 8 3 8
2 8 4 5
3 8 2 7
0 8 9 8
9 7 7 6
5 5 6 5
7 6 5 7
4 5 7 7
9 4 8 4
9 8 8 8
8 4 9 4
8 8 8 4
9 4 8 4
6 5 7 4
9 6 7 4
4 4 5 3
2 7 2 6
5 3 6 2
2 6 1 5
6 2 7 3
1 5 0 4
7 3 8 4
1 2 6 7