#include <cstdio>
using namespace std;
int game_over=0,red_captain=0,blue_captain=0;
int m[15][15]={
{1,2,3,4,5,4,3,2,1},
{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},
{1,2,3,4,5,4,3,2,1},
};
int v[15][15]={
{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},
};
void print(int player,int op){
if(player==0){
printf("red ");
}else{
printf("blue ");
}
if(op==1){
printf("car");
}else if(op==2){
printf("horse");
}else if(op==3){
printf("elephant");
}else if(op==4){
printf("guard");
}else if(op==5){
printf("captain");
}else if(op==6){
printf("duck");
}else{
printf("soldier");
}
printf(";");
}
void captain_flag(int player){
if(player==0){
red_captain=1;
}else{
blue_captain=1;
}
}
bool will_kill_captain(int x,int y,int player,int op){
if(op==1){
int flag=0,kill=0;
for(int i=y-1;i>=0;i--){
if(v[x][i]){
flag=1;
if(m[x][i]==5&&v[x][i]!=player+1){
kill=1;
flag=0;
}
break;
}
}
if(kill==1) return true;
flag=0;
kill=0;
for(int i=y+1;i<9;i++){
if(v[x][i]){
flag=1;
if(m[x][i]==5&&v[x][i]!=player+1){
kill=1;
flag=0;
}
break;
}
}
if(kill==1) return true;
flag=0;
kill=0;
for(int i=x-1;i>=0;i--){
if(v[i][y]){
flag=1;
if(m[i][y]==5&&v[i][y]!=player+1){
kill=1;
flag=0;
}
break;
}
}
if(kill==1) return true;
flag=0;
kill=0;
for(int i=x+1;i<=9;i++){
if(v[i][y]){
flag=1;
if(m[i][y]==5&&v[i][y]!=player+1){
kill=1;
flag=0;
}
break;
}
}
if(kill==1) return true;
return false;
}else if(op==2){
for(int xx=-1;xx<=1;xx+=2){
for(int yy=-1;yy<=1;yy+=2){
if(x+xx*2>=0&&x+xx*2<10&&y+yy>=0&&y+yy<9){
if(m[x+xx*2][y+yy]==5&&!v[x+xx][y]&&v[x+xx*2][y+yy]!=player+1) return true;
}else if(x+xx>=0&&x+xx<10&&y+yy*2>=0&&y+yy*2<9){
if(m[x+xx][y+yy*2]==5&&!v[x][y+yy]&&v[x+xx][y+yy*2]!=player+1) return true;
}
}
}
return false;
}else if(op==3){
for(int xx=-1;xx<=1;xx+=2){
for(int yy=-1;yy<=1;yy+=2){
if(x+xx*2>=0&&x+xx*2<10&&y+yy*2>=0&&y+yy*2<9){
if(!v[x+xx][y+yy]&&m[x+xx*2][y+yy*2]==5&&v[x+xx*2][y+yy*2]!=player+1){
return true;
}
}
}
}
return false;
}else if(op==4){
for(int xx=-1;xx<=1;xx+=2){
for(int yy=-1;yy<=1;yy+=2){
if(x+xx>=0&&x+xx<10&&y+yy>=0&&y+yy<9){
if(m[x+xx][y+yy]==5&&v[x+xx][y+yy]!=player+1) return true;
}
}
}
return false;
}else if(op==5){
for(int xx=-1;xx<=1;xx++){
for(int yy=-1;yy<=1;yy++){
if(xx==0&&yy==0) continue;
if(xx==0||yy==0){
if(x+xx>=0&&x+xx<10&&y+yy>=0&&y+yy<9){
if(m[x+xx][y+yy]==5&&v[x+xx][y+yy]!=player+1) return true;
}
}
}
}
return false;
}else if(op==6){
for(int xx=-1;xx<=1;xx+=2){
for(int yy=-1;yy<=1;yy+=2){
if(x+xx*3>=0&&x+xx*3<10&&y+yy*2>=0&&y+yy*2<9){
if(v[x+xx*2][y+yy]||v[x+xx][y]) continue;
if(m[x+xx*3][y+yy*2]==5&&v[x+xx*3][y+yy*2]!=player+1) return true;
}else if(x+xx*2>=0&&x+xx*2<10&&y+yy*3>=0&&y+yy*3<9){
if(v[x+xx][y+yy*2]||v[x][y+yy]) continue;
if(m[x+xx*2][y+yy*3]==5&&v[x+xx*2][y+yy*3]!=player+1) return true;
}
}
}
return false;
}else{
for(int xx=-1;xx<=1;xx++){
for(int yy=-1;yy<=1;yy++){
if(xx==0&&yy==0) continue;
if(x+xx>=0&&x+xx<10&&y+yy>=0&&y+yy<9){
if(m[x+xx][y+yy]==5&&v[x+xx][y+yy]!=player+1) return true;
}
}
}
return false;
}
}
int captain_num(int player){
if(player==0){
return red_captain;
}else{
return blue_captain;
}
}
bool chess_move(int sx,int sy,int ex,int ey,int player){
if(m[sx][sy]==1){
if(sx!=ex&&sy!=ey) return false;
if(sx==ex){
int flag=0;
if(sy<ey){
for(int i=sy+1;i<ey;i++){
if(v[sx][i]){
flag=1;
break;
}
}
if(flag==1) return false;
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}else{
for(int i=sy-1;i>ey;i--){
if(v[sx][i]){
flag=1;
break;
}
}
if(flag==1) return false;
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}
}else if(sy==ey){
int flag=0;
if(sx<ex){
for(int i=sx+1;i<ex;i++){
if(v[i][sy]){
flag=1;
break;
}
}
if(flag==1) return false;
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}else{
for(int i=sx+1;i<ex;i++){
if(v[i][sy]){
flag=1;
break;
}
}
if(flag==1) return false;
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}
}
}else if(m[sx][sy]==2){
for(int xx=-1;xx<=1;xx+=2){
for(int yy=-1;yy<=1;yy+=2){
if(sx+xx*2==ex&&sy+yy==ey){
if(v[sx+xx][sy]) return false;
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}else if(sx+xx==ex&&sy+yy*2==ey){
if(v[sx][sy+yy]) return false;
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}
}
}
return false;
}else if(m[sx][sy]==3){
for(int xx=-1;xx<=1;xx+=2){
for(int yy=-1;yy<=1;yy+=2){
if(sx+xx*2==ex&&sy+yy*2==ey){
if(v[sx+xx][sy+yy]) return false;
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}
}
}
return false;
}else if(m[sx][sy]==4){
for(int xx=-1;xx<=1;xx+=2){
for(int yy=-1;yy<=1;yy+=2){
if(sx+xx==ex&&sy+yy==ey){
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}
}
}
return false;
}else if(m[sx][sy]==5){
for(int xx=-1;xx<=1;xx++){
for(int yy=-1;yy<=1;yy++){
if(xx==0&&yy==0) continue;
if(xx==0||yy==0){
if(sx+xx==ex&&sy+yy==ey){
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}
}
}
}
return false;
}else if(m[sx][sy]==6){
for(int xx=-1;xx<=1;xx+=2){
for(int yy=-1;yy<=1;yy+=2){
if(sx+xx*3==ex&&sy+yy*2==ey){
if(v[sx+xx*2][sy+yy]||v[sx+xx][sy]) return false;
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}else if(sx+xx*2==ex&&sy+yy*3==ey){
if(v[sx+xx][sy+yy*2]||v[sx][sy+yy]) return false;
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}
}
}
return false;
}else{
for(int xx=-1;xx<=1;xx++){
for(int yy=-1;yy<=1;yy++){
if(xx==0&&yy==0) continue;
if(sx+xx==ex&&sy+yy==ey){
print(player,m[sx][sy]);
if(m[ex][ey]){
print(player^1,m[ex][ey]);
}else{
printf("NA;");
}
red_captain=0;
blue_captain=0;
int a1=v[ex][ey];
int a2=m[ex][ey];
int a3=v[sx][sy];
int a4=m[sx][sy];
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(m[i][j]){
if(will_kill_captain(i,j,v[i][j]-1,m[i][j])){
captain_flag((v[i][j]-1)^1);
}
}
}
}
v[ex][ey]=a1;
m[ex][ey]=a2;
v[sx][sy]=a3;
m[sx][sy]=a4;
if(m[ex][ey]==5){
game_over=1;
printf("no;yes");
}else{
if(will_kill_captain(ex,ey,player,m[sx][sy])){
captain_flag(player^1);
printf("yes;");
}else if(captain_num(player)||captain_num(player^1)){
printf("yes;");
}else{
printf("no;");
}
printf("no");
}
v[ex][ey]=player+1;
m[ex][ey]=m[sx][sy];
v[sx][sy]=0;
m[sx][sy]=0;
return true;
}
}
}
return false;
}
}
bool check(int sx,int sy,int ex,int ey,int player){
if(game_over==1) return false;
if(sx==ex&&sy==ey) return false;
if(sx<0||sy<0||sx>=10||sy>=9||ex<0||ey<0||ex>9||ey>8) return false;
if(v[sx][sy]!=player+1) return false;
if(v[ex][ey]==player+1) return false;
return chess_move(sx,sy,ex,ey,player);
}
void play(int sx,int sy,int ex,int ey,int &player){
if(check(sx,sy,ex,ey,player)==false){
printf("Invalid command");
player^=1;
}
printf("\n");
}
int main(){
int q;
scanf("%d",&q);
int player=0;
while(q--){
int sx,sy,ex,ey;
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
play(sx,sy,ex,ey,player);
player^=1;
}
return 0;
}