#include #include using namespace std; int n; char c; int map[107][107]; int visited[107][107]; int outed[107][107]; pair nextx(int pozx, int pozy, int dx, int dy) { pozx += dx; pozy += dy; if(pozx<0 or pozy<0 or pozx>=n or pozy>=n) return make_pair(-1,-1); if(map[pozx][pozy]) return make_pair(pozx,pozy); return nextx(pozx, pozy, dx, dy); } void dfs1(int pozx, int pozy) { if(pozx<0 or pozy<0 or pozx>=n or pozy>=n or visited[pozx][pozy] or map[pozx][pozy] == 0) return; visited[pozx][pozy] = 1; if(c == 'K') { dfs1(pozx-1, pozy-1); dfs1(pozx-1, pozy); dfs1(pozx-1, pozy+1); dfs1(pozx, pozy-1); dfs1(pozx, pozy+1); dfs1(pozx+1, pozy-1); dfs1(pozx+1, pozy); dfs1(pozx+1, pozy+1); } if(c == 'R' || c == 'Q') { pair tmp; tmp = nextx(pozx,pozy, -1, 0); dfs1(tmp.first, tmp.second); // pair tmp; tmp = nextx(pozx,pozy, +1, 0); dfs1(tmp.first, tmp.second); // pair tmp; tmp = nextx(pozx,pozy, 0,-1); dfs1(tmp.first, tmp.second); // pair tmp; tmp = nextx(pozx,pozy, 0, +1); dfs1(tmp.first, tmp.second); } if(c == 'B' || c == 'Q') { pair tmp; tmp = nextx(pozx,pozy, -1, -1); dfs1(tmp.first, tmp.second); // pair tmp; tmp = nextx(pozx,pozy, +1, +1); dfs1(tmp.first, tmp.second); // pair tmp; tmp = nextx(pozx,pozy, +1,-1); dfs1(tmp.first, tmp.second); // pair tmp; tmp = nextx(pozx,pozy, -1, +1); dfs1(tmp.first, tmp.second); } if(c == 'N') { dfs1(pozx-2, pozy-1); dfs1(pozx-2, pozy+1); dfs1(pozx+2, pozy+1); dfs1(pozx+2, pozy-1); dfs1(pozx+1, pozy+2); dfs1(pozx-1, pozy+2); dfs1(pozx+1, pozy-2); dfs1(pozx-1, pozy-2); } } void dfs2(int pozx, int pozy, int popx, int popy) { if(pozx<0 or pozy<0 or pozx>=n or pozy>=n or outed[pozx][pozy] or map[pozx][pozy] == 0) return; outed[pozx][pozy] = 1; if(c == 'K') { dfs2(pozx-1, pozy-1, pozx, pozy); dfs2(pozx-1, pozy, pozx, pozy); dfs2(pozx-1, pozy+1, pozx, pozy); dfs2(pozx, pozy-1, pozx, pozy); dfs2(pozx, pozy+1, pozx, pozy); dfs2(pozx+1, pozy-1, pozx, pozy); dfs2(pozx+1, pozy, pozx, pozy); dfs2(pozx+1, pozy+1, pozx, pozy); } if(c == 'R' || c == 'Q') { pair tmp; tmp = nextx(pozx,pozy, -1, 0); dfs2(tmp.first, tmp.second, pozx, pozy); //pair tmp; tmp = nextx(pozx,pozy, +1, 0); dfs2(tmp.first, tmp.second, pozx, pozy); //pair tmp; tmp = nextx(pozx,pozy, 0,-1); dfs2(tmp.first, tmp.second, pozx, pozy); //pair tmp; tmp = nextx(pozx,pozy, 0, +1); dfs2(tmp.first, tmp.second, pozx, pozy); } if(c == 'B' || c == 'Q') { pair tmp; tmp = nextx(pozx,pozy, -1, -1); dfs2(tmp.first, tmp.second, pozx, pozy); //pair tmp; tmp = nextx(pozx,pozy, +1, +1); dfs2(tmp.first, tmp.second, pozx, pozy); //pair tmp; tmp = nextx(pozx,pozy, +1,-1); dfs2(tmp.first, tmp.second, pozx, pozy); //pair tmp; tmp = nextx(pozx,pozy, -1, +1); dfs2(tmp.first, tmp.second, pozx, pozy); } if(c == 'N') { dfs2(pozx-2, pozy-1, pozx, pozy); dfs2(pozx-2, pozy+1, pozx, pozy); dfs2(pozx+2, pozy+1, pozx, pozy); dfs2(pozx+2, pozy-1, pozx, pozy); dfs2(pozx+1, pozy+2, pozx, pozy); dfs2(pozx-1, pozy+2, pozx, pozy); dfs2(pozx+1, pozy-2, pozx, pozy); dfs2(pozx-1, pozy-2, pozx, pozy); } if(popx != -1) { cout<>n>>c; char z; int ile = 1; int lx,ly; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cin>>z; if(z != '.') { map[i][j] = ile; ile++; lx = i; ly = j; } } } dfs1(lx,ly); for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(map[i][j] and visited[i][j]==0) { cout<<"NO"; return 0; } } } cout<<"YES"<