#include <iostream>
#include <vector>
using namespace std;
const int N = 4;
bool isSafe(const vector<int>& board, int row, int col) {
for (int i = 0; i < row; ++i) {
if (board[i] == col ||
board[i] - i == col - row ||
board[i] + i == col + row)
{
return false;
}
}
return true;
}
void printBoard(const vector<int>& board) {
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
if (board[i] == j) {
cout << "Q ";
} else {
cout << ". ";
}
}
cout << endl;
}
cout << endl;
}
void solveNQueens(vector<int>& board, int row, vector<vector<int> >& solutions) {
if (row == N) {
solutions.push_back(board);
return;
}
for (int col = 0; col < N; ++col) {
if (isSafe(board, row, col)) {
board[row] = col;
solveNQueens(board, row + 1, solutions);
board[row] = -1;
}
}
}
int main() {
vector<vector<int> > solutions;
vector<int> board(N, -1);
solveNQueens(board, 0, solutions);
for (vector<vector<int> >::iterator it = solutions.begin(); it != solutions.end(); ++it) {
cout << "Solution " << distance(solutions.begin(), it) + 1 << ":\n";
printBoard(*it);
}
cout << "Total solutions: " << solutions.size() << endl;
return 0;
}