(* Baseline: n-queens count for n=6. We count placements of n queens on an n×n board such that no two share a row, column, or diagonal. *) let safe q queens = let rec go qs offset = match qs with | [] -> true | h :: t -> if h = q then false else if h - q = offset then false else if q - h = offset then false else go t (offset + 1) in go queens 1 ;; let rec range a b = if a > b then [] else a :: range (a + 1) b ;; let rec solve n queens row = if row > n then 1 else List.fold_left (fun acc col -> if safe col queens then acc + solve n (col :: queens) (row + 1) else acc) 0 (range 1 n) ;; solve 4 [] 1