let () = let rec primes n m k lst = if n < m then lst else if n mod m = 0 then primes (n/m) m k (m :: lst) else if m = 2 then primes n (m+1) k lst else primes n (m+2) k lst in let rec insert x lst = match lst with | [] -> [(1, x)] | (cnt, num) :: t -> if num = x then (cnt+1, num) :: t else (cnt,num) :: insert x t in let rec separete lst = match lst with | [] -> [] | (a,b) :: t -> a :: separete t in Scanf.scanf "%d\n" @@ fun n -> let lst = primes n 2 n [] in let slst = List.fold_left (fun lst x -> insert x lst) [] lst in Printf.printf "%s\n" (if List.length lst = 1 then "Sosu!" else if List.for_all (fun x -> x = 2) (separete slst) then "Heihosu!" else if List.for_all (fun x -> x = 3) (separete slst) then "Ripposu!" else if (List.fold_left (+) 0 lst) = 2 * n then "Kanzensu!" else string_of_int n)