import java.util.*;
class Solution {
public List<List<String>> solveNQueens(int n) {
List<List<String>> ans = new ArrayList<>();
List<List<Integer>> all = new ArrayList<>();
getAll(n, new boolean[n], new LinkedList<>(), all);
char[] temp = new char[n];
Arrays.fill(temp, '.');
for (List<Integer> integers : all) {
boolean flag = true;
for (int i = 0; i < n && flag; i++) {
int y1 = integers.get(i);
for (int j = i + 1; j < n; j++) {
int x = j - i;
int y = integers.get(j) - y1;
if (Math.abs(x) == Math.abs(y)) {
flag = false;
break;
}
}
}
if (flag) {
List<String> now = new ArrayList<>();
for (int i = 0; i < n; i++) {
temp[integers.get(i)] = 'Q';
now.add(new String(temp));
temp[integers.get(i)] = '.';
}
ans.add(now);
}
}
return ans;
}
void getAll(int n, boolean[] use, Deque<Integer> now, List<List<Integer>> ans) {
if (now.size() == n) {
ans.add(new ArrayList<>(now));
return;
}
for (int i = 0; i < n; i++) {
if (!use[i]) {
use[i] = true;
now.add(i);
getAll(n, use, now, ans);
now.removeLast();
use[i] = false;
}
}
}
}