#include #include #include #define S 107 using namespace std; typedef pair < int , int > pa; vector < pa > V[S][S]; char T[S][S]; int n; void dodaj(int x, int y, int x2, int y2){ if(x2 < 1 || y2 < 1 || x2 > n || y2 > n) return; if(x == x2 && y == y2) return; if(T[x2][y2] == '.') return; V[x][y].push_back({x2,y2}); } bool odw[S][S]; bool odw2[S][S]; void DFS(int x, int y){ if(odw[x][y]) return; odw[x][y] = 1; for(int i = 0; i < V[x][y].size();i++){ int x2 = V[x][y][i].first; int y2 = V[x][y][i].second; if(!odw[x2][y2]){ DFS(x2,y2); } } } void DFS2(int x, int y){ if(odw2[x][y]) return; odw2[x][y] = 1; for(int i = 0; i < V[x][y].size();i++){ int x2 = V[x][y][i].first; int y2 = V[x][y][i].second; if(!odw2[x2][y2]){ DFS2(x2,y2); printf("%d %d %d %d\n",x2,y2,x,y); } } } int main(void){ char c; int rootX,rootY; scanf("%d %c",&n,&c); for(int i = 1; i <= n;i++){ for(int j = 1; j <= n;j++){ scanf(" %c",&T[i][j]); if(T[i][j] != '.'){ rootX = i; rootY = j; } } } for(int i = 1; i <= n;i++){ for(int j = 1; j <= n;j++){ if(T[i][j] == '.') continue; if(c == 'R' || c == 'Q'){ for(int i2 = 1; i2 <= n;i2++){ dodaj(i,j,i2,j); } for(int j2 = 1; j2 <= n;j2++){ dodaj(i,j,i,j2); } } if(c == 'B' || c == 'Q'){ for(int i2 = 1; i2 <= n;i2++){ dodaj(i,j,i-i2,j-i2); dodaj(i,j,i+i2,j-i2); dodaj(i,j,i-i2,j+i2); dodaj(i,j,i+i2,j+i2); } } if(c == 'N'){ dodaj(i,j,i-2,j-1); dodaj(i,j,i+2,j-1); dodaj(i,j,i-2,j+1); dodaj(i,j,i+2,j+1); dodaj(i,j,i-1,j-2); dodaj(i,j,i-1,j+2); dodaj(i,j,i+1,j-2); dodaj(i,j,i+1,j+2); } if(c == 'K'){ dodaj(i,j,i-1,j-1); dodaj(i,j,i-1,j); dodaj(i,j,i-1,j+1); dodaj(i,j,i,j-1); dodaj(i,j,i,j+1); dodaj(i,j,i+1,j-1); dodaj(i,j,i+1,j); dodaj(i,j,i+1,j+1); } } } DFS(rootX,rootY); for(int i = 1; i <= n;i++){ for(int j = 1; j <= n;j++){ if(T[i][j] == '.') continue; if(!odw[i][j]){ printf("NO"); return 0; } } } printf("YES\n"); DFS2(rootX,rootY); return 0; }