RT
#include <bits/stdc++.h>
using namespace std;
// no 0
// captain 1
// guard 2
// elephant 3
// horse 4
// car 5
// duck 6
// soldier 7
int chess[10][9] = {
{5, 4, 3, 2, 1, 2, 3, 4, 5},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{6, 0, 0, 0, 0, 0, 0, 0, 6},
{7, 0, 7, 0, 7, 0, 7, 0, 7},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{7, 0, 7, 0, 7, 0, 7, 0, 7},
{6, 0, 0, 0, 0, 0, 0, 0, 6},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{5, 4, 3, 2, 1, 2, 3, 4, 5}
};
// no 0
// red 1
// blue 2
int color[10][9] = {
{1, 1, 1, 1, 1, 1, 1, 1, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0, 1},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{2, 0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{2, 2, 2, 2, 2, 2, 2, 2, 2}
};
const int dxCaptain[4] = {1, 0, 0, -1}, dyCaptain[4] = {0, 1, -1, 0};
const int dxGuard[4] = {1, 1, -1, -1}, dyGuard[4] = {1, -1, 1, -1};
const int dxElephant[4] = {2, 2, -2, -2}, dyElephant[4] = {2, -2, 2, -2},
dxNotMoveElephant[4] = {1, 1, -1, -1}, dyNotMoveElephant[4] = {1, -1, 1, -1};
const int dxHorse[8] = {2, 2, 1, 1, -1, -1, -2, -2}, dyHorse[8] = {1, -1, 2, -2, 2, -2, 1, -1},
dxNotMoveHorse[8] = {1, 1, 0, 0, 0, 0, -1, -1}, dyNotMoveHorse[8] = {0, 0, 1, -1, 1, -1, 0, 0};
const int dxDuck[8] = {3, 3, 2, 2, -2, -2, -3, -3}, dyDuck[8] = {2, -2, 3, -3, 3, -3, 2, -2},
dxNotMoveDuck1[8] = {2, 2, 1, 1, -1, -1, -2, -2}, dyNotMoveDuck1[8] = {1, -1, 2, -2, 2, -2, 1, -1},
dxNotMoveDuck2[8] = {1, 1, 0, 0, 0, 0, -1, -1}, dyNotMoveDuck2[8] = {0, 0, 1, -1, 1, -1, 0, 0};
const int dxSoldier[8] = {1, 1, 1, 0, 0, -1, -1, -1}, dySoldier[8] = {1, 0, -1, 1, -1, 1, 0, -1};
bool finished = false;
int player = 1;
// 1:red
// 2:blue
bool canMove(int x0, int y0, int x1, int y1) {
if(chess[x0][y0] == 0)
return false;
if(color[x0][y0] != player)
return false;
if(chess[x0][y0] == 1) {
for(int i = 0; i < 4; i++) {
int nx = x0 + dxCaptain[i], ny = y0 + dyCaptain[i];
if(nx == x1 && ny == y1) {
if(chess[x1][y1] != 0) {
if(color[x1][y1] == player)
return false;
}
return true;
}
}
return false;
} else if(chess[x0][y0] == 2) {
for(int i = 0; i < 4; i++) {
int nx = x0 + dxGuard[i], ny = y0 + dyGuard[i];
if(nx == x1 && ny == y1) {
if(chess[x1][y1] != 0) {
if(color[x1][y1] == player)
return false;
}
return true;
}
}
return false;
} else if(chess[x0][y0] == 3) {
for(int i = 0; i < 4; i++) {
int nx = x0 + dxElephant[i], ny = y0 + dyElephant[i];
if(nx == x1 && ny == y1) {
if(chess[x0 + dxNotMoveElephant[i]][y0 + dyNotMoveElephant[i]] != 0)
return false;
if(chess[x1][y1] != 0) {
if(color[x1][y1] == player)
return false;
}
return true;
}
}
return false;
} else if(chess[x0][y0] == 4) {
for(int i = 0; i < 8; i++) {
int nx = x0 + dxHorse[i], ny = y0 + dyHorse[i];
if(nx == x1 && ny == y1) {
if(chess[x0 + dxNotMoveHorse[i]][y0 + dyNotMoveHorse[i]] != 0)
return false;
if(chess[x1][y1] != 0) {
if(color[x1][y1] == player)
return false;
}
return true;
}
}
return false;
} else if(chess[x0][y0] == 5) {
if(x0 == x1) {
for(int i = min(y0, y1) + 1; i < max(y0, y1); i++) {
if(chess[x0][i] != 0)
return false;
}
if(chess[x1][y1] != 0) {
if(color[x1][y1] == player)
return false;
}
} else if(y0 == y1) {
for(int i = min(x0, x1) + 1; i < max(x0, x1); i++) {
if(chess[i][y0] != 0)
return false;
}
if(chess[x1][y1] != 0) {
if(color[x1][y1] == player)
return false;
}
} else
return false;
return true;
} else if(chess[x0][y0] == 6) {
for(int i = 0; i < 8; i++) {
int nx = x0 + dxDuck[i], ny = y0 + dyDuck[i];
if(nx == x1 && ny == y1) {
if(chess[x0 + dxNotMoveDuck1[i]][y0 + dyNotMoveDuck1[i]] != 0 || chess[x0 + dxNotMoveDuck2[i]][y0 + dyNotMoveDuck2[i]] != 0)
return false;
if(chess[x1][y1] != 0) {
if(color[x1][y1] == player)
return false;
}
return true;
}
}
return false;
} else {
for(int i = 0; i < 8; i++) {
int nx = x0 + dxSoldier[i], ny = y0 + dySoldier[i];
if(nx == x1 && ny == y1) {
if(chess[x1][y1] != 0) {
if(color[x1][y1] == player)
return false;
}
return true;
}
}
return false;
}
return true;
}
void move(int x0, int y0, int x1, int y1) {
if(color[x0][y0] == 1)
cout << "red ";
else
cout << "blue ";
if(chess[x0][y0] == 1)
cout << "captain;";
else if(chess[x0][y0] == 2)
cout << "guard;";
else if(chess[x0][y0] == 3)
cout << "elephant;";
else if(chess[x0][y0] == 4)
cout << "horse;";
else if(chess[x0][y0] == 5)
cout << "car;";
else if(chess[x0][y0] == 6)
cout << "duck;";
else
cout << "soldier;";
if(chess[x1][y1] == 0)
cout << "NA;";
else {
if(color[x1][y1] == 1)
cout << "red ";
else
cout << "blue ";
if(chess[x1][y1] == 1)
cout << "captain;";
else if(chess[x1][y1] == 2)
cout << "guard;";
else if(chess[x1][y1] == 3)
cout << "elephant;";
else if(chess[x1][y1] == 4)
cout << "horse;";
else if(chess[x1][y1] == 5)
cout << "car;";
else if(chess[x1][y1] == 6)
cout << "duck;";
else
cout << "soldier;";
}
chess[x1][y1] = chess[x0][y0];
color[x1][y1] = color[x0][y0];
chess[x0][y0] = color[x0][y0] = 0;
player = 3 - player;
}
bool findCaptain(int player, int& x, int& y) {
bool find = false;
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 9; j++) {
if(chess[i][j] == 1 && color[i][j] == player) {
x = i, y = j;
find = true;
}
}
}
return find;
}
bool jiangjun(int player, bool& have) {
int x = -1, y = -1;
have = findCaptain(3 - player, x, y);
if(x != -1 && y != -1) {
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 9; j++) {
if(chess[i][j] == 0)
continue;
if(canMove(i, j, x, y))
return true;
}
}
return false;
}
return false;
}
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
int x0, y0, x1, y1;
cin >> x0 >> y0 >> x1 >> y1;
if(finished) {
puts("Invalid command");
} else {
if(!canMove(x0, y0, x1, y1))
puts("Invalid command");
else {
move(x0, y0, x1, y1);
bool have = true;
if(jiangjun(1, have) == false) {
if(have == false) {
cout << "no;yes\n";
finished = true;
continue;
} else {
cout << "no;no\n";
continue;
}
} else {
cout << "yes;no\n";
continue;
}
have = true;
if(jiangjun(2, have) == false) {
if(have == false) {
cout << "no;yes\n";
finished = true;
continue;
} else {
cout << "no;no\n";
continue;
}
} else {
cout << "yes;no\n";
continue;
}
}
}
}
return 0;
}