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 datatype state = Sleeping | Awake fun findAns _ _ [] acc = List.rev acc | findAns index Sleeping (h :: tl) acc = if h = #"o" then findAns (index + 1) Awake tl (index :: acc) else findAns (index + 1) Sleeping tl acc | findAns index Awake (h :: tl) acc = if h = #"o" then findAns (index + 1) Awake tl acc else findAns (index + 1) Sleeping tl acc fun printList [] = print "\n" | printList [x] = ( print (Int.toString x); printList [] ) | printList (h :: tl) = ( print (Int.toString h); print " "; printList tl ) val () = let val n = readInt () val s = readStr () val ans = findAns 1 Sleeping (String.explode s) [] in ( print (Int.toString (List.length ans) ^ "\n"); printList ans ) end