90%
#include<bits/stdc++.h>
using namespace std;
int n;
vector<bool> flag(n, 0);
struct queen {
int x;
int y;
};
stack<queen> s, temp;
int result = 0;
bool judge(int x, int y) {
stack<queen> tmp = s;
while (!tmp.empty()) {
queen q = tmp.top();
if (flag[y] || (abs(q.x - x) == abs(q.y - y))) {
return false;
}
tmp.pop();
}
return true;
}
void sovled() {
if (s.empty()) {
queen q;
q.x = 0;
for (q.y = 0; q.y < n; q.y++) {
s.push(q);
flag[q.y] = true;
sovled();
s.pop();
flag[q.y] = false;
}
}
else {
if (s.size() == n) {
temp = s;
result++;
return;
}
else {
queen q;
q.x = s.top().x + 1;
for (q.y = 0; q.y < n; q.y++) {
if (judge(q.x, q.y)) {
s.push(q);
flag[q.y] = true;
sovled();
s.pop();
flag[q.y] = false;
}
}
}
}
}
int main()
{
cin >> n;
sovled();
cout << "Total count: " << result;
return 0;
}