module IntMap = Map.Make( struct type t = int let compare = compare end) let stream_fold f init st = let result = ref init in Stream.iter (fun x -> result := f !result x) st; !result let stream_to_rev_list st = stream_fold (fun result elem -> elem :: result) [] st let map_find_opt key map = if IntMap.mem key map then Some(IntMap.find key map) else None let map_to_list map = let result = ref [] in IntMap.iter (fun k v -> result := (k, v) :: !result) map; !result let solve s_lst = let rec solve' lst map = match lst with | [] -> map | x :: rest -> let map' = match map_find_opt x map with | None -> IntMap.add x 1 map | Some(y) -> IntMap.add x (y + 1) map in solve' rest map' in solve' s_lst IntMap.empty |> map_to_list |> List.sort (fun (k1, v1) (k2, v2) -> match compare v2 v1 with | c when c <> 0 -> c | _ -> compare k2 k1) |> List.hd |> fun (k, v) -> k let () = let n = read_line () |> int_of_string in let s_lst = Stream.from(fun i -> if i >= n then None else read_line () |> String.length |> fun j -> Some(j - 2)) |> stream_to_rev_list in solve s_lst |> Printf.printf "%d\n"