#include using namespace std; #define PB push_back #define ZERO (1e-10) #define INF int(1e9+1) #define CL(A,I) (memset(A,I,sizeof(A))) #define DEB printf("DEB!\n"); #define D(X) cout<<" "<<#X": "<B&&A-ZERO pll; typedef vector vi; typedef pair ii; typedef vector vii; #define IN(n) int n;scanf("%d",&n); #define FOR(i, m, n) for (int i(m); i < n; i++) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define FT(m, n) FOR(k, m, n) #define aa first #define bb second void ga(int N,int *A){F(N)scanf("%d",A+i);} #define MX 1024 #define PP {i,j} #define ST(A) (sort(A.begin(),A.end())) typedef map mp; set S; mp r,R,b,B; map W; vi g[MX*MX]; ii Z[MX*MX]; char s[MX],c; int N,C,KX[]={-1,0,1,-1,1,-1,0,1},KY[]={1,1,1,0,0,-1,-1,-1}, NX[]={-2,-2,-1,-1,1,1,2,2},NY[]={1,-1,2,-2,2,-2,1,-1},V[MX*MX]; void smp(mp&M){for(auto&h:M)ST(h.bb);} int hsh(ii a){ if(!W.count(a))Z[C]=a,W[a]=C++; return W[a]; } #define ADD(A,B) (g[A].PB(B)) void gx(vii&M,ii a){ int I=lower_bound(M.begin(),M.end(),a)-M.begin(); if(I+1u> o; void dfs(int u,ii p){ if(V[u]++)return; for(auto&h:g[u])dfs(h,Z[u]); if(~p.aa)o.PB({Z[u],p}); } int main(void){ scanf("%d %c",&N,&c); F(N){ scanf("%s",s); FF(N)if(s[j]^46)S.insert(PP),r[i].PB(PP),R[j].PB(PP),b[i-j].PB(PP),B[i+j].PB(PP); } for(auto&h:S){ if(c>80&&c<83)gx(r[h.aa],h),gx(R[h.bb],h); if(c==81||c==66)gx(b[h.aa-h.bb],h),gx(B[h.aa+h.bb],h); if(c==78)F(8)tst(h.aa+NX[i],h.bb+NY[i],h); if(c==75)F(8)tst(h.aa+KX[i],h.bb+KY[i],h); } dfs(0,{-1,-1}); if((S.size()-1)^o.size())puts("NO"); else { puts("YES"); for(auto&h:o)printf("%d %d %d %d\n",1+h.aa.aa,1+h.aa.bb,1+h.bb.aa,1+h.bb.bb); } return 0; }