class Solution {
public:
vector<vector<string>> glo_ans;
void solve(vector<string> board, int row, int &col_check , int &diag_check
, int &rdiag_check)
{
if(row == board.size())
{ glo_ans.push_back(board);
return;
}
for(int col =0;col<board[0].size();col++){
if(board[row][col]=='.')
{
if(((col_check & 1 << col) ==0) && ((diag_check & (1 << (row+col)))==0)
&& (rdiag_check & (1<<(row-col+board.size()-1))) ==0 )
{
col_check ^= (1 << col);
diag_check ^= (1 << (row+col));
rdiag_check ^= (1<<(row-col+board.size()-1));
board[row][col]='Q';
solve(board , row+1 , col_check, diag_check , rdiag_check);
col_check ^= (1 << col);
diag_check ^= (1 << (row+col));
rdiag_check ^= (1<<(row-col+board.size()-1));
board[row][col]='.';
}
}
}
}
vector<vector<string>> solveNQueens(int n) {
string k = "";
for(int i =0;i<n;i++)k+=".";
vector<string> board(n ,k);
int col_check(0),diag_check(0),rdiag_check(0);
solve(board , 0 , col_check , diag_check , rdiag_check);
return glo_ans;
}
};