#include #include #define ll long long int #define pb push_back #define st first #define nd second #define pii pair #define mp make_pair #define pll pair #define ld long double #define ull unsigned long long using namespace std; const int nax = 105; char a[nax][nax]; int n; int daj(pii pole){ return pole.st * nax + pole.nd; } vector adj[nax * nax + nax + nax]; vector ruchyWieza(int r, int c){ vector ans; for(int i=1;i<=n;i++){ if(i != r){ ans.pb(mp(i, c)); } if(i != c){ ans.pb(mp(r, i)); } } return ans; } bool ok(pii pole){ return (pole.st >= 1 && pole.st <= n && pole.nd >= 1 && pole.nd <= n); } vector dir = {mp(-1, -1), mp(1, -1), mp(1, 1), mp(-1, 1)}; vector ruchyGoniec(int r, int c){ vector ans; for(int i=0;i<4;i++){ pii cur = mp(r, c); while(1){ cur.st += dir[i].st; cur.nd += dir[i].nd; if(ok(cur)) ans.pb(cur); else break; } } return ans; } vector ruchyKrol(int r, int c){ vector ans; for(int i=-1;i<=1;i++){ for(int j=-1;j<=1;j++){ if(i == 0 && j == 0) continue; int r1 = r + i; int c1 = c + j; pii cur = mp(r1, c1); if(ok(cur)) ans.pb(cur); } } return ans; } vector ruchyKon(int r, int c){ vector ans; for(int i=-2;i<=2;i++){ for(int j=-2;j<=2;j++){ if(abs(i) == 2 && abs(j) == 1){ int r1 = r + i; int c1 = c + j; pii cur = mp(r1, c1); if(ok(cur)) ans.pb(cur); } else if(abs(i) == 1 && abs(j) == 2){ int r1 = r + i; int c1 = c + j; pii cur = mp(r1, c1); if(ok(cur)) ans.pb(cur); } } } return ans; } bool vis[nax * nax + nax + nax]; int c = 0; vector G[nax * nax + nax + nax]; void dfs(int v){ vis[v] = true; c++; for(int x : adj[v]){ if(vis[x] == false){ G[x].pb(v); G[v].pb(x); dfs(x); } } } pii jakie(int x){ int dr = x % nax; x -= dr; int pi = x / nax; return mp(pi, dr); } void rozw(int v, int p = -1){ for(int x : G[v]){ if(x == p) continue; rozw(x, v); pii one = jakie(v); pii two = jakie(x); cout << two.st << " " << two.nd << " " << one.st << " " << one.nd << "\n"; } } void solve(){ cin >> n; char ty; cin >> ty; pii sp; int ac = 0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin >> a[i][j]; if(a[i][j] != '.'){ sp = mp(i, j); ac++; } } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(a[i][j] == '.') continue; vector ruchy; if(ty == 'R') ruchy = ruchyWieza(i, j); else if(ty == 'K') ruchy = ruchyKrol(i, j); else if(ty == 'N') ruchy = ruchyKon(i, j); else if(ty == 'B') ruchy = ruchyGoniec(i, j); else{ ruchy = ruchyGoniec(i, j); auto cur = ruchyWieza(i, j); for(auto y : cur) ruchy.pb(y); } int cur = daj(mp(i, j)); for(pii to : ruchy){ if(a[to.st][to.nd] == '.') continue; int x2 = daj(to); adj[cur].pb(x2); adj[x2].pb(cur); } } } dfs(daj(sp)); if(c != ac){ cout << "NO" << "\n"; return; } cout << "YES" << "\n"; rozw(daj(sp)); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int tt = 1; // cin >> tt; while(tt--) solve(); return 0; } //C:\Users\Przemek\Desktop\PROJEKCIK\ctu