#include <iostream>
#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;
}