#include <stdio.h>
#include <ctype.h>
char board[8][9];
bool flag[8][8];

void resetBoard(){ //Fungsi untuk reset board tiap case baru
	for(int i=0;i<8;i++){
		for(int j=0;j<8;j++){
			flag[i][j] = false;
		}
	}
}
bool checkEnemy(int x, int y){ //Fungsi cek itu musuh/bukan
	if(x>7 || x<0 || y>7 || y<0){ //Cek apakah keluar batas
		return false;
	}
	if(islower(board[x][y])){ //Kalo huruf kecil = musuh
		flag[x][y] = true; //Tandain boardnya yg ada musuh yg bisa kita serang
		return true;
	}
	return false; //return false kalo dia gk ada apa"
}
void knightMoves(int x, int y){ //Fungsi untuk kuda, ada 8 titik hitung manual jadinya langsung panggil func 8x
	//bawah
	checkEnemy(x+1, y-2);
	checkEnemy(x+1, y+2);
	checkEnemy(x+2, y-1);
	checkEnemy(x+2, y+1);
	//atas
	checkEnemy(x-1, y-2);
	checkEnemy(x-1, y+2);
	checkEnemy(x-2, y-1);
	checkEnemy(x-2, y+1);
}
void kingMoves(int x, int y){ //Fungsi untuk raja
	for(int i=x-1;i<=x+1;i++){ //Bentuk array 2d 3x3 dengan titik tengah posisi raja
		for(int j=y-1;j<=y+1;j++){
			checkEnemy(i, j);
		}
	}
}
void bishopMoves(int x, int y){
	for(int i=x-1, j=y-1;i>=0 && j>=0;i--,j--){ //Diagonal kiri atas
		if(isupper(board[i][j])){ //Break kalo ketemu temen, karna kehalang langsung gk bisa lanjut
			break;
		}
		if(checkEnemy(i, j)){
			break;
		}
	}
	for(int i=x-1, j=y+1;i>=0 && j<8;i--,j++){ //Diagonal kanan atas
		if(isupper(board[i][j])){
			break;
		}
		if(checkEnemy(i, j)){
			break;
		}
	}
	for(int i=x+1, j=y-1;i<8 && j>=0;i++,j--){ //Diagonal kiri bawah
		if(isupper(board[i][j])){
			break;
		}
		if(checkEnemy(i, j)){
			break;
		}
	}
	for(int i=x+1, j=y+1;i<8 && j<8;i++,j++){ //Diagonal kanan bawah
		if(isupper(board[i][j])){
			break;
		}
		if(checkEnemy(i, j)){
			break;
		}
	}
}
void pawnMoves(int x, int y){ //Fungsi untuk pion
	checkEnemy(x-1, y-1); //Cek diagonal kiri atas
	checkEnemy(x-1, y+1); //Cek diagonal kanan atas
}
void rookMoves(int x, int y){ 
	for(int i=y-1;i>=0;i--){ //Geser kiri ampe mentok
		if(isupper(board[x][i])){
			break;
		}
		if(checkEnemy(x, i)){
			break;
		}
	}
	for(int i=y+1;i<8;i++){ //Geser kanan ampe mentok
		if(isupper(board[x][i])){ 
			break;
		}
		if(checkEnemy(x, i)){
			break;
		}
	}
	for(int i=x-1;i>=0;i--){ //Geser atas ampe mentok
		if(isupper(board[i][y])){
			break;
		}
		if(checkEnemy(i, y)){
			break;
		}				
	}
	for(int i=x+1;i<8;i++){ //Geser bawah mentok
		if(isupper(board[i][y])){
			break;
		}
		if(checkEnemy(i, y)){
			break;
		}
	}	
}

void findEnemy(int x, int y, char k){
	switch(k){
		case 'P':
			pawnMoves(x, y);
			break;
		case 'R':
			rookMoves(x, y);
			break;
		case 'B':
			bishopMoves(x, y);
			break;
		case 'N':
			knightMoves(x, y);
			break;
		case 'Q': //Panggil 3 function karena movesnya si ratu terdiri atas move yg bisa dilakukan 3 karakter
			rookMoves(x, y);
			bishopMoves(x, y);
			break;
		case 'K':
			kingMoves(x, y);
			break;
	}
}

int main(){
	int tc;
	scanf("%d", &tc);
	for(int i=1;i<=tc;i++){
		bool check;
		resetBoard();
		for(int j=0;j<8;j++){ //Isi array 2d dengan boardnya
			getchar();
			scanf("%[^\n]", board[j]);
		}
		for(int j=0;j<8;j++){ //Loop array 2d buat nyari musuh
			for(int k=0;k<8;k++){
				if(isupper(board[j][k])){ //Kalo ketemu huruf besar berarti punya kita, kita cek musuh apa aja yg bisa dimakan
					findEnemy(j, k, board[j][k]); //Sama karakter dititik itu
				}
			}
		}
		printf("Case #%d:\n", i);
		for(int j=0;j<8;j++){ // Loop untuk print keluar titik yang bisa diserang
			for(int k=0;k<8;k++){
				if(flag[j][k]){
					check = true; //check untuk nandain kalo ada yg bisa diserang, kalo ampe ujung gk ada berarti false, print -1
					printf("%c %d\n", 65+k, 8-j);
				}
			}
		}
		if(!check){
			printf("-1\n");
		}
	}
	return 0;
}