#include using namespace std; const int N = 105; const int kdx[] = {-1, -1, -1, 0, 1, 1, 1, 0}, kdy[] = {-1, 0, 1, 1, 1, 0, -1, -1}; const int ndx[] = {-2, -2, -1, 1, 2, 2, 1, -1}, ndy[] = {1, -1, -2, -2, -1, 1, 2, 2}; int n, sz, b[N][N]; pair < int, int > f[N * N]; char a[N][N]; inline bool check(int x, int y) { return 1 <= x && x <= n && 1 <= y && y <= n; } vector < int > g[N]; vector < pair < int, int > > e; int p[N * N]; int dsu_get(int v) { return p[v] == v ? v : p[v] = dsu_get(p[v]); } void dfs(int v, int pr = -1) { for (int to : g[v]) { if (to != pr) { dfs(to, v); cout << f[to].first << " " << f[to].second << " " << f[v].first << " " << f[v].second << "\n"; } } } int main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); char c; cin >> n >> c; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cin >> a[i][j]; if (a[i][j] != '.') { b[i][j] = ++sz; f[sz] = make_pair(i, j); } } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (a[i][j] != '.') { if (c == 'K') { for (int k = 0; k < 8; k++) { int x = i + kdx[k], y = j + kdy[k]; if (check(x, y) && b[x][y] != 0) { e.push_back(make_pair(b[i][j], b[x][y])); } } } else if (c == 'R') { // left for (int k = j - 1; k >= 1; k--) { if (check(i, k) && b[i][k] != 0) { e.push_back(make_pair(b[i][j], b[i][k])); } } // right for (int k = j + 1; k <= n; k++) { if (check(i, k) && b[i][k] != 0) { e.push_back(make_pair(b[i][j], b[i][k])); } } // up for (int k = i - 1; k >= 1; k--) { if (check(k, j) && b[k][j] != 0) { e.push_back(make_pair(b[i][j], b[k][j])); } } // down for (int k = i + 1; k <= n; k++) { if (check(k, j) && b[k][j] != 0) { e.push_back(make_pair(b[i][j], b[k][j])); } } } else if (c == 'Q') { // left for (int k = j - 1; k >= 1; k--) { if (check(i, k) && b[i][k] != 0) { e.push_back(make_pair(b[i][j], b[i][k])); } } // right for (int k = j + 1; k <= n; k++) { if (check(i, k) && b[i][k] != 0) { e.push_back(make_pair(b[i][j], b[i][k])); } } // up for (int k = i - 1; k >= 1; k--) { if (check(k, j) && b[k][j] != 0) { e.push_back(make_pair(b[i][j], b[k][j])); } } // down for (int k = i + 1; k <= n; k++) { if (check(k, j) && b[k][j] != 0) { e.push_back(make_pair(b[i][j], b[k][j])); } } // diag left up for (int x = i - 1, y = j - 1; x >= 1 && y >= 1; x--, y--) { if (check(x, y) && b[x][y] != 0) { e.push_back(make_pair(b[i][j], b[x][y])); } } // diag right up for (int x = i - 1, y = j + 1; x >= 1 && y <= n; x--, y++) { if (check(x, y) && b[x][y] != 0) { e.push_back(make_pair(b[i][j], b[x][y])); } } // diag left down for (int x = i + 1, y = j - 1; x <= n && y >= 1; x++, y--) { if (check(x, y) && b[x][y] != 0) { e.push_back(make_pair(b[i][j], b[x][y])); } } // diag right down for (int x = i + 1, y = j + 1; x <= n && y <= n; x++, y++) { if (check(x, y) && b[x][y] != 0) { e.push_back(make_pair(b[i][j], b[x][y])); } } } else if (c == 'B') { // diag left up for (int x = i - 1, y = j - 1; x >= 1 && y >= 1; x--, y--) { if (check(x, y) && b[x][y] != 0) { e.push_back(make_pair(b[i][j], b[x][y])); } } // diag right up for (int x = i - 1, y = j + 1; x >= 1 && y <= n; x--, y++) { if (check(x, y) && b[x][y] != 0) { e.push_back(make_pair(b[i][j], b[x][y])); } } // diag left down for (int x = i + 1, y = j - 1; x <= n && y >= 1; x++, y--) { if (check(x, y) && b[x][y] != 0) { e.push_back(make_pair(b[i][j], b[x][y])); } } // diag right down for (int x = i + 1, y = j + 1; x <= n && y <= n; x++, y++) { if (check(x, y) && b[x][y] != 0) { e.push_back(make_pair(b[i][j], b[x][y])); } } } else if (c == 'N') { for (int k = 0; k < 8; k++) { int x = i + ndx[k], y = j + ndy[k]; if (check(x, y) && b[x][y] != 0) { e.push_back(make_pair(b[i][j], b[x][y])); } } } } } } for (int i = 1; i <= sz; i++) p[i] = i; for (auto it : e) { int x = it.first, y = it.second; if (dsu_get(x) != dsu_get(y)) { g[x].push_back(y); g[y].push_back(x); p[dsu_get(x)] = dsu_get(y); } } for (int i = 1; i <= sz; i++) { if (dsu_get(i) != dsu_get(1)) { cout << "NO\n"; return 0; } } cout << "YES\n"; dfs(1); } /** 3 N N.. ..N ... */