void solve(int colm, int n, vector<bool> &col, vector<bool> &ldiag, vector<bool> &rdiag, vector<vector<int>> &ans, vector<int> &res) {
for(int i=0; i<n; i++) {
if(colm == n) {
ans.push_back(res);
return;
}
if(!col[i] && !ldiag[colm-i + n-1] && !rdiag[i+colm]) {
res.push_back(i+1);
col[i] = true;
ldiag[colm-i+n-1] = true;
rdiag[i+colm] = true;
solve(colm+1, n, col, ldiag, rdiag, ans, res);
res.pop_back();
col[i] = false;
ldiag[colm-i+n-1] = false;
rdiag[i+colm] = false;
}
}
}
vector<vector<int>> nQueen(int n) {
// code here
vector<bool>col(n, false);
vector<bool>ldiag(2*n-1, false);
vector<bool>rdiag(2*n-1, false);
vector<vector<int>> ans;
vector<int> res;
solve(0, n, col, ldiag, rdiag, ans, res);
return ans;
}