let is_kadomatsu ((a1, a2, a3): int * int * int) = (a1 <> a2 && a2 <> a3 && a3 <> a1) && ((a2 < a1 && a2 < a3) || (a2 > a1 && a2 > a3)) let max_a (a1, a2, a3): int = max a1 a2 |> max a3 let count_kadomatsu (a1, a2, a3) = let ma = max_a (a1, a2, a3) in let rec count_kadomatsu' idx result = if idx > ma then result else let ik = is_kadomatsu (a1 mod idx, a2 mod idx, a3 mod idx) in let nextResult = if ik then result + 1 else result in count_kadomatsu' (idx + 1) nextResult in count_kadomatsu' 3 0 let () = let atp = read_line () |> Str.split (Str.regexp_string " ") |> List.map int_of_string |> fun lst -> (List.nth lst 0, List.nth lst 1, List.nth lst 2) in let ans = if is_kadomatsu atp then "INF" else string_of_int (count_kadomatsu atp) in print_endline ans