#include #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define REP(i, n) FOR(i, 0, n) #define ll long long using namespace std; const int MAXN = 100100; vector ve[MAXN]; int matr[110][110]; int n; void add(int x1, int y1, int x2, int y2) { if (x2 < 0 || x2 >= n) return; if (y2 < 0 || y2 >= n) return; if (x1 == x2 && y1 == y2) return; if (matr[x2][y2] == -1) return; int a = matr[x1][y1], b = matr[x2][y2]; ve[a].push_back(b); ve[b].push_back(a); return; } vector > out; map > ma; int bio[MAXN]; void dfs(int x) { bio[x] = 1; for (int y : ve[x]) { if (bio[y]) continue; dfs(y); out.push_back({y, x}); } return; } int main() { ios_base::sync_with_stdio(false); char C; cin >> n >> C; int m = 0; REP(i, n) { REP(j, n) { char x; cin >> x; if (x == '.') matr[i][j] = -1; else { matr[i][j] = m; ma[m] = {i, j}; m++; } } } REP(i, n) { REP(j, n) { if (matr[i][j] == -1) continue; if (C == 'R') { REP(k, n) { add(i, j, i + k, j); add(i, j, i - k, j); add(i, j, i, j + k); add(i, j, i, j - k); } } if (C == 'Q') { FOR(k, 1, n) { add(i, j, i + k, j); add(i, j, i - k, j); add(i, j, i, j + k); add(i, j, i, j - k); add(i, j, i + k, j + k); add(i, j, i + k, j - k); add(i, j, i - k, j + k); add(i, j, i - k, j - k); } } if (C == 'B') { FOR(k, 1, n) { add(i, j, i + k, j + k); add(i, j, i + k, j - k); add(i, j, i - k, j + k); add(i, j, i - k, j - k); } } if (C == 'N') { add(i, j, i + 2, j + 1); add(i, j, i + 2, j - 1); add(i, j, i - 2, j + 1); add(i, j, i - 2, j - 1); add(i, j, i + 1, j + 2); add(i, j, i + 1, j - 2); add(i, j, i - 1, j + 2); add(i, j, i - 1, j - 2); } if (C == 'K') { add(i, j, i + 1, j); add(i, j, i - 1, j); add(i, j, i, j + 1); add(i, j, i, j - 1); add(i, j, i + 1, j + 1); add(i, j, i + 1, j - 1); add(i, j, i - 1, j + 1); add(i, j, i - 1, j - 1); } } } dfs(0); if (out.size() != m - 1) { cout << "NO\n"; } else { cout << "YES\n"; for (auto tr : out) { int x = tr.first, y = tr.second; cout << ma[x].first + 1 << " " << ma[x].second + 1 << " "; cout << ma[y].first + 1 << " " << ma[y].second + 1 << "\n"; } } return 0; }