Scanf.scanf "%d" (fun n -> let s = Array.init n (fun _ -> Scanf.scanf " %s" (fun s -> s)) in let module S = Set.Make (struct type t = string let compare = compare end) in let rec loop i set = let rec loop2 j set = if j >= n then loop (i + 1) set else loop2 (j + 1) (if i = j then set else S.add (s.(i) ^ s.(j)) set) in if i = n then set else loop2 0 set in Printf.printf "%d\n" @@ S.cardinal @@ loop 0 S.empty )