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)) (0, 0, 0) (String.explode s) val ans = Int.min (numOfT, Int.min (numOfR, numOfE div 2)) in print (Int.toString ans ^ "\n") end