answer = 0
n = int(input())
board = [-1 for _ in range(n)]
def promising(row):
for i in range(row):
if board[row] == board[i] or \
abs(row - i) == abs(board[row] - board[i]):
return False
return True
def dfs(row):
global answer
if row == n: # n번째 행까지 n개의 퀸을 놓았는가?
answer += 1 # 갯수 업데이트
return # 다음 열로 이동 ~ 1차원으로 단순화하기 때문에 열은 명시하지 않는다.
# n번째 행이 아닐 때
for col in range(n):
board[row] = col
if promising(row):
dfs(row + 1)
dfs(0)
print(answer)