#include #define ll long long using namespace std; int n; char c; string mapa[123]; vector> graf[123][123]; void rooks() { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (mapa[i][j] != '.') { for (int l = 0; l < n; l++) { if (l != i && mapa[l][j] != '.') graf[i][j].push_back({l, j}); if (l != j && mapa[i][l] != '.') graf[i][j].push_back({i, l}); } } } } } int dbx[4] = {-1, -1, 1, 1}; int dby[4] = {-1, 1, -1, 1}; int dkx[8] = {-1, 0, 1, -1, 1, -1, 0, 1}; int dky[8] = {-1, -1, -1, 0, 0, 1, 1, 1}; int dnx[8] = {-2, -2, 2, 2, -1, -1, 1, 1}; int dny[8] = {-1, 1, -1, 1, -2, 2, -2, 2}; bool inside(int i, int j) { return i >= 0 && i < n && j >= 0 && j < n; } void bishops() { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (mapa[i][j] != '.') { for (int d = 0; d < 4; d++) { int ii = i + dbx[d]; int jj = j + dby[d]; while (inside(ii, jj)) { if (mapa[ii][jj] != '.') graf[i][j].push_back({ii, jj}); ii += dbx[d]; jj += dby[d]; } } } } } } void knights() { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (mapa[i][j] != '.') { for (int d = 0; d < 8; d++) { int ii = i + dnx[d]; int jj = j + dny[d]; if (inside(ii, jj) && mapa[ii][jj] != '.') graf[i][j].push_back({ii, jj}); } } } } } void kings() { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (mapa[i][j] != '.') { for (int d = 0; d < 8; d++) { int ii = i + dkx[d]; int jj = j + dky[d]; if (inside(ii, jj) && mapa[ii][jj] != '.') graf[i][j].push_back({ii, jj}); } } } } } void queens() { bishops(); rooks(); } int found = 0; bool was[123][123]; vector, pair>> ans; void dfs(int x, int y, int fx, int fy) { was[x][y] = true; for(auto pair : graf[x][y]) { if(!was[pair.first][pair.second]) { dfs(pair.first, pair.second, x, y); } } ans.push_back({{x, y}, {fx, fy}}); } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin >> n >> c; for (int i = 0; i < n; i++) cin >> mapa[i]; if(c == 'B') bishops(); else if(c == 'N') knights(); else if(c == 'Q') queens(); else if(c == 'K') kings(); else rooks(); bool done = false; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(mapa[i][j] != '.') { found++; if(!done) { dfs(i, j, i, j); done = true; } } } } if(ans.size() == found) { cout << "YES" << endl; for(int i = 0; i < ans.size()-1; i++) { cout << ans[i].first.first + 1 << " " << ans[i].first.second + 1 << " " << ans[i].second.first + 1 << " " << ans[i].second.second + 1 << endl; } } else { cout << "NO" << endl; } return 0; }