#include <iostream>
#include <vector>
#include <string>
#define N 8
using namespace std;
int y, x;
bool isSafe(const vector<string> &board, int row, int col)
{
/* Check this row on left side */
for (int i = 0; i < col; ++i) {
if (board[row][i] == 'w') return false;
}
/* Check upper diagonal on left side */
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; --i, --j) {
if (board[i][j] == 'w') return false;
}
/* Check lower diagonal on left side */
for (int i = row + 1, j = col - 1; i < N && j >= 0; ++i, --j) {
if (board[i][j] == 'w') return false;
}
return true;
}
// Place all the kings suitably before col x
bool SolveNQueenB(vector<string> &board, int col = 0)
{
// Solution found!
if (col == x) {
board[y][x] = 'w';
return true;
}
for (int i = 0; i < N; ++i) {
// Found a square for queen[i][col]
if (isSafe(board, i, col)) {
board[i][col] = 'w';
if (SolveNQueenB(board, col + 1))
return true;
board[i][col] = '.'; // backtrack
}
}
return false;
}
// Place all the kings suitably after col x
bool SolveNQueenA(vector<string> &board, int col = x + 1)
{
// Solution found!
if (col == N) {
return true;
}
for (int i = 0; i < N; ++i) {
// Found a square for queen[i][col]
if (isSafe(board, i, col)) {
board[i][col] = 'w';
if (SolveNQueenA(board, col + 1))
return true;
board[i][col] = '.'; // backtrack
}
}
return false;
}
int main()
{
// print all solutions to N-Queen problem.
vector<string> board(N);
for (int i = 0; i < N; ++i)
board[i].resize(N, '.');
cin >> y >> x;
--y; --x; // set to the right indexes
SolveNQueenB(board);
SolveNQueenA(board);
for (int i = 0; i < N; ++i) {
cout << board[i] << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojZGVmaW5lIE4gOAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCB5LCB4OwoKYm9vbCBpc1NhZmUoY29uc3QgdmVjdG9yPHN0cmluZz4gJmJvYXJkLCBpbnQgcm93LCBpbnQgY29sKQp7CiAgICAvKiBDaGVjayB0aGlzIHJvdyBvbiBsZWZ0IHNpZGUgKi8KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sOyArK2kpIHsKICAgICAgICBpZiAoYm9hcmRbcm93XVtpXSA9PSAndycpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8qIENoZWNrIHVwcGVyIGRpYWdvbmFsIG9uIGxlZnQgc2lkZSAqLwogICAgZm9yIChpbnQgaSA9IHJvdyAtIDEsIGogPSBjb2wgLSAxOyBpID49IDAgJiYgaiA+PSAwOyAtLWksIC0taikgewogICAgICAgIGlmIChib2FyZFtpXVtqXSA9PSAndycpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8qIENoZWNrIGxvd2VyIGRpYWdvbmFsIG9uIGxlZnQgc2lkZSAqLwogICAgZm9yIChpbnQgaSA9IHJvdyArIDEsIGogPSBjb2wgLSAxOyBpIDwgTiAmJiBqID49IDA7ICsraSwgLS1qKSB7CiAgICAgICAgaWYgKGJvYXJkW2ldW2pdID09ICd3JykgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KLy8gUGxhY2UgYWxsIHRoZSBraW5ncyBzdWl0YWJseSBiZWZvcmUgY29sIHgKYm9vbCBTb2x2ZU5RdWVlbkIodmVjdG9yPHN0cmluZz4gJmJvYXJkLCBpbnQgY29sID0gMCkKewogICAgLy8gU29sdXRpb24gZm91bmQhCiAgICBpZiAoY29sID09IHgpIHsKICAgICAgICBib2FyZFt5XVt4XSA9ICd3JzsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgKytpKSB7CiAgICAgICAgLy8gRm91bmQgYSBzcXVhcmUgZm9yIHF1ZWVuW2ldW2NvbF0KICAgICAgICBpZiAoaXNTYWZlKGJvYXJkLCBpLCBjb2wpKSB7CiAgICAgICAgICAgIGJvYXJkW2ldW2NvbF0gPSAndyc7CiAgICAgICAgICAgIGlmIChTb2x2ZU5RdWVlbkIoYm9hcmQsIGNvbCArIDEpKQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIGJvYXJkW2ldW2NvbF0gPSAnLic7IC8vIGJhY2t0cmFjawogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQovLyBQbGFjZSBhbGwgdGhlIGtpbmdzIHN1aXRhYmx5IGFmdGVyIGNvbCB4CmJvb2wgU29sdmVOUXVlZW5BKHZlY3RvcjxzdHJpbmc+ICZib2FyZCwgaW50IGNvbCA9IHggKyAxKQp7CiAgICAvLyBTb2x1dGlvbiBmb3VuZCEKICAgIGlmIChjb2wgPT0gTikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpIHsKICAgICAgICAvLyBGb3VuZCBhIHNxdWFyZSBmb3IgcXVlZW5baV1bY29sXQogICAgICAgIGlmIChpc1NhZmUoYm9hcmQsIGksIGNvbCkpIHsKICAgICAgICAgICAgYm9hcmRbaV1bY29sXSA9ICd3JzsKICAgICAgICAgICAgaWYgKFNvbHZlTlF1ZWVuQShib2FyZCwgY29sICsgMSkpCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgYm9hcmRbaV1bY29sXSA9ICcuJzsgLy8gYmFja3RyYWNrCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgppbnQgbWFpbigpCnsKICAgIC8vIHByaW50IGFsbCBzb2x1dGlvbnMgdG8gTi1RdWVlbiBwcm9ibGVtLgogICAgdmVjdG9yPHN0cmluZz4gYm9hcmQoTik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47ICsraSkKICAgICAgICBib2FyZFtpXS5yZXNpemUoTiwgJy4nKTsKICAgIGNpbiA+PiB5ID4+IHg7CiAgICAtLXk7IC0teDsgLy8gc2V0IHRvIHRoZSByaWdodCBpbmRleGVzCiAgICBTb2x2ZU5RdWVlbkIoYm9hcmQpOwogICAgU29sdmVOUXVlZW5BKGJvYXJkKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgKytpKSB7CiAgICAgICAgY291dCA8PCBib2FyZFtpXSA8PCBlbmRsOwogICAgfQogICAgcmV0dXJuIDA7Cn0K