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 s = readStr () val (numOfT, numOfR, numOfE) = List.foldl (fn (c, (nt, nr, ne)) => if c = #"t" then (nt + 1, nr, ne) else if c = #"r" then (nt, nr + 1, ne) else if c = #"e" then (nt, nr, ne + 1) else (nt, nr, ne)) (Int.toLarge 0, Int.toLarge 0, Int.toLarge 0) (String.explode s) val ans = LargeInt.min (numOfT, LargeInt.min (numOfR, numOfE div 2)) in print (LargeInt.toString ans ^ "\n") end