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 = 0 then string_of_int n else if List.length lst = 1 then "Sosu!" else if List.for_all (fun x -> x mod 2 = 0) (separete slst) then "Heihosu!" else if List.for_all (fun x -> x mod 3 = 0) (separete slst) then "Ripposu!" else if n = 6 || n = 28 then "Kanzensu!" else string_of_int n)