fun member x nil = false | member x (h::tl) = if x = h then true else member x tl fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) fun readStr () = let fun scan reader stream = SOME (StringCvt.splitl (not o Char.isSpace) reader (StringCvt.skipWS reader stream)) in valOf (TextIO.scanStream scan TextIO.stdIn) end val () = let val n = readInt () val s_s = List.tabulate (n, fn _ => readStr ()) val ans = List.length (List.foldl (fn (s, acc) => List.foldl (fn (s1s2, innerAcc) => if s1s2 = "" orelse member s1s2 innerAcc then innerAcc else s1s2 :: innerAcc) acc (List.map (fn ss => if s = ss then "" else s ^ ss) s_s)) [] s_s) in print (Int.toString ans ^ "\n") end