#include #define SINGLE_SOLUTION 0 #define PRINT_SOLUTIONS 0 using namespace std; const int maxn = 100; int n; int a[maxn]; int mark[maxn]; int markd1[maxn*2]; int markd2[maxn*2]; int ans=0; void acceptboard(){ ans++; if(PRINT_SOLUTIONS){ for(int i = 0 ; i < n ; ++i){ for(int j = 0 ; j < n ; ++j) if(a[i]==j) cout << "Q"; else{ cout << "."; } cout << endl; } cout << endl; } if(SINGLE_SOLUTION){ exit(0); } } void backtrack(int depth){ if(depth==n) return acceptboard(); for(int j = 0 ; j < n ; ++j){ int l = j+depth; int r = n+depth-j; if(!mark[j] && !markd1[l] && !markd2[r]){ // اگر در ستون جی، قطر چپ ال و قطر راست آر وزیری نبود mark[j]=markd1[l]=markd2[r]=true; a[depth]=j; backtrack(depth+1); mark[j]=markd1[l]=markd2[r]=false; } } int main() { cin >> n; backtrack(0); cout << ans << endl; return 0; }