type Response = Sosu | Heihousu | Rippousu | Kanzensu | Other let checker n = let limit = n |> float |> sqrt |> ceil |> int let rec check i = if i > limit then Sosu elif n % i = 0 then let mutable j = i let mutable result = Other while j <= limit do if j*j = n then result <- Heihousu elif j*j*j = n then result <- Rippousu j <- j+ 1 result else check (i+1) let isKanzensu n = if n%2 <> 0 then false else let sum = [ for i in 1..(n-1) do if n % i = 0 then yield i ] |> List.sum sum = n if n <= 1 then Other else if n = 2 then Sosu else if isKanzensu n then Kanzensu else check 2 let N = stdin.ReadLine().Trim() |> int match checker N with | Response.Sosu -> printfn "Sosu!" | Response.Heihousu -> printfn "Heihosu!" | Response.Rippousu -> printfn "Ripposu!" | Response.Kanzensu -> printfn "Kanzensu!" | Response.Other -> printfn "%d" N