#include #include #include using namespace std; struct csucs { int x, y; bool van = false; bool jart = false; vector elek; void ujel(csucs* cs2) { if (cs2 && cs2 != this) elek.push_back(cs2); } }; csucs graf[101][101]; int N; csucs* cs(int i, int j) { if (i < 0 || N <= i || j < 0 || N <= j) return nullptr; return graf[i][j].van ? &graf[i][j] : nullptr; } void bejar(csucs* cs, vector>& er) { for (csucs* cs2 : cs->elek) { if (cs2->jart) continue; cs2->jart = true; bejar(cs2, er); er.push_back({cs2->x, cs2->y, cs->x, cs->y}); } } int main() { ios::sync_with_stdio(false); char t; cin >> N >> t; csucs* cs0 = nullptr; int e = 0; for (int i = 0; i < N; i++) { string sor; cin >> sor; for (int j = 0; j < N; j++) { csucs& cs = graf[i][j]; cs.x = i + 1; cs.y = j + 1; if (sor[j] != '.') { cs.van = true; cs0 = &cs; e++; } } } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { csucs& c = graf[i][j]; if (!c.van) continue; if (t == 'R' || t == 'Q') { for (int k = 0; k < N; k++) { c.ujel(cs(i, k)); c.ujel(cs(k, j)); } } if (t == 'B' || t == 'Q') { for (int k = 0; k < N; k++) { c.ujel(cs(k, j + i - k)); c.ujel(cs(k, j - i + k)); } } if (t == 'K') { for (int k = i - 1; k <= i + 1; k++) { for (int l = j - 1; l <= j + 1; l++) { c.ujel(cs(k, l)); } } } if (t == 'N') { c.ujel(cs(i - 2, j - 1)); c.ujel(cs(i - 2, j + 1)); c.ujel(cs(i + 2, j + 1)); c.ujel(cs(i + 2, j - 1)); c.ujel(cs(i - 1, j - 2)); c.ujel(cs(i - 1, j + 2)); c.ujel(cs(i + 1, j + 2)); c.ujel(cs(i + 1, j - 2)); } } } vector> er; cs0->jart = true; bejar(cs0, er); if (er.size() != e - 1) { cout << "NO\n"; } else { cout << "YES\n"; for (auto& x : er) { cout << x[0] << " " << x[1] << " " << x[2] << " " << x[3] << "\n"; } } }