#include using namespace std; int n, a[115][115]; bool us[105][105]; char x; vector < pair < int, int > > g[105][105]; void add(int a, int b, int x, int y){ g[a][b].push_back({x, y}); g[x][y].push_back({a, b}); } void dfs(int x, int y){ us[x][y] = 1; for (int i = 0; i < g[x][y].size(); ++i){ int l = g[x][y][i].first; int r = g[x][y][i].second; if (!us[l][r])dfs(l, r); } } void get_ans(int x, int y, int px, int py){ us[x][y] = 1; for (int i = 0; i < g[x][y].size(); ++i){ int l = g[x][y][i].first; int r = g[x][y][i].second; if (!us[l][r])get_ans(l, r, x, y); } if (px != 0){ cout <>n>>x; for (int i = 1; i <= n; ++i){ string s; cin >>s; for (int j = 1; j <= n; ++j){ if (s[j - 1] != '.')a[i][j] = 1; } } if (x == 'R' || x == 'Q'){ for (int i = 1; i <= n; ++i){ for (int j = 1; j <= n; ++j){ if (!a[i][j])continue; for (int l = i + 1; l <= n; ++l){ if (a[l][j]){ add(i, j, l, j); break; } } for (int r = j + 1; r <= n; ++r){ if (a[i][r]){ add(i, j, i, r); break; } } } } } if (x == 'Q' || x == 'B'){ for (int i = 1; i <= n; ++i){ for (int j = 1; j <= n; ++j){ if (!a[i][j])continue; int l = i + 1, r = j + 1; while (l <= n && r <= n){ if (a[l][r]){ add(i, j, l, r); break; } l++; r++; } l = i + 1, r = j -1; while (l <= n && r >= 1){ if (a[l][r]){ add(i, j, l, r); break; } l++; r--; } } } } if (x == 'N'){ for (int i = 1; i <= n; ++i){ for (int j = 1; j <= n; ++j){ if (!a[i][j])continue; if (a[i + 2][j + 1]){ add(i, j, i + 2, j + 1); } if (a[i + 2][j - 1]){ add(i, j, i + 2, j - 1); } if (a[i + 1][j - 2]){ add(i, j, i + 1, j - 2); } if (a[i + 1][j + 2]){ add(i, j, i + 1, j + 2); } } } } if (x == 'K'){ for (int i = 1; i <= n; ++i){ for (int j = 1; j <= n; ++j){ if (!a[i][j])continue; if (a[i + 1][j - 1]){ add(i, j, i + 1, j - 1); } if (a[i + 1][j]){ add(i, j, i + 1, j); } if (a[i + 1][j + 1]){ add(i, j, i + 1, j + 1); } if (a[i][j + 1]){ add(i, j, i, j + 1); } } } } for (int i = 1; i <= n; ++i){ bool o = false; for (int j = 1; j <= n; ++j){ if (a[i][j]){ dfs(i, j); o = true; break; } } if (o)break; } for (int i = 1; i <= n; ++i){ for (int j = 1; j <= n; ++j){ if (a[i][j] && !us[i][j])return cout <<"NO", 0; } } cout <<"YES\n"; memset(us, 0, sizeof(us)); for (int i = 1; i <= n; ++i){ for (int j = 1; j <= n; ++j){ if (a[i][j]){ get_ans(i, j, 0, 0); return 0; } } } }