#include using namespace std; void yes(const vector> grid) { int length = grid.size(); cout << "Yes" << "\n"; for (int i = 0; i < length; i++) { for (int j = 0; j < length; j++) { cout << grid[i][j]; } cout << "\n"; } } void no() { cout << "No" << "\n"; } void solve() { int N, K; cin >> N >> K; if (N == 2) { if (K == 2) { vector> grid{ {'#', '#'}, {'.', '.'} }; yes(grid); } else { no(); } return; } if (K <= 2 || (N * N) / 2 < K) { no(); return; } vector grid(N, vector(N, '.')); if (K <= N) { for (int j = 0; j < K - 1; j++) { grid[0][j] = '#'; } grid[1][0] = '#'; yes(grid); return; } int div = (2 * K) / N; int mod = (2 * K) % N; for (int j = 0; j < N; j++) { if (mod > 0 && j < mod) { grid[div - 1][j] = '#'; } else { grid[div - 2][j] = '#'; } } for (int i = 0; i < div - 1; i++) { for (int j = 1; j < N - 1; j += 3) { grid[i][j] = '#'; } grid[i][N - 2] = '#'; } if (mod > 0) { grid[div - 2][mod - 1] = '#'; } int remain = K; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { remain -= grid[i][j] == '#' ? 1 : 0; } } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (remain > 0 && grid[i][j] == '.') { grid[i][j] = '#'; remain -= 1; } } } yes(grid); } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int T; cin >> T; while (T--) solve(); }