/**
 * 
 * @param n int整型 the n
 * @return int整型
 */
function Nqueen(n) {
    // write code here
    let ans = 0;
    // 皇后下标行的列下标
    let queen = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
    // x是当前行,y是当前测试列
    function check(x, y) {
        // i是之前皇后的行,queen[i]是之前皇后的列
        for (let i = 0; i < x; i++) {
            if (i == x || queen[i] == y || Math.abs(y - queen[i]) == Math.abs(x - i)) {
                return false;
            }
        }
        return true;
    }
    function dfs(i) {
        if (i == n) {
            ++ans;
            return;
        }
        // 测试所有列
        for (let j = 0; j < n; ++j) {
            if (check(i, j)) {
                queen[i] = j;
                dfs(i + 1);
            }
        }
    }
    dfs(0);
    return ans;
}
module.exports = {
    Nqueen: Nqueen
};