open System let if' b f = if b then Some (f ()) else None let factorize (n: int64): Map = let rec count p n = if n % p <> 0L then (n, 0) else count p (n / p) |> (fun (m, k) -> (m, k + 1)) let f (p, n) = if' (n <> 1L) (fun () -> if p * p <= n then let (n', k) = count p n let elem = if' (k > 0) (fun () -> (p, k)) (elem, (p + 1L, n')) else (Some (n, 1), (p, 1L)) ) Seq.unfold f (2L, n) |> Seq.choose id |> Map.ofSeq let solve n = factorize n |> Map.toSeq |> Seq.choose (fun (k, v) -> if v % 2 <> 0 then Some k else None) |> Seq.fold (*) 1L [] let main _ = let x = Console.ReadLine() |> int64 //printfn "%A" (factorize x) printfn "%d" (solve x) //exit code 0