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 fun makeBag s = let val bag = Array.array (26, 0) in ( List.app (fn ch => let val index = Char.ord ch - Char.ord #"A" val newVal = Array.sub (bag, index) + 1 in Array.update (bag, index, newVal) end) (String.explode s); bag ) end val () = let val n = readInt () val s = readStr () val bag = makeBag s in ( Array.app (fn v => print (Int.toString v)) bag; print "\n" ) end