import Data.Bits
import Data.List
import Control.Monad
import qualified Data.Vector.Unboxed as V
import qualified Data.Vector.Unboxed.Mutable as VM
import Control.Monad.ST
import Data.Maybe (fromMaybe)
import qualified Data.ByteString.Lazy.Char8 as B
--import Debug.Trace

fromLeft :: String -> Int -> Int -> Int -> [(Int,Int)] -- cnt,pos
fromLeft [] cnt pos now = [(cnt `div` 2,pos),(cnt - (cnt `div` 2), pos+1)]
fromLeft (c:s) cnt pos now = if c == 'R' then (cnt `div` 2,pos):(cnt - (cnt `div` 2), pos+1):(fromLeft s 0 now (now+1))
  else fromLeft s (cnt+1) pos (now+1)

fromRight:: String -> Int -> Int -> Int -> Int -> [(Int,Int)] -- cnt,pos
fromRight [] len cnt pos now = [(cnt `div` 2,len-pos-1),(cnt - (cnt `div` 2),len- pos-2)]
fromRight (c:s) len cnt pos now = if c == 'L' then (cnt `div` 2,len-pos-1):(cnt - (cnt `div` 2),len- pos-2):(fromRight s len 0 now (now+1))
  else fromRight s len (cnt+1) pos (now+1)

cnt :: Int -> [(Int,Int)] -> [(Int,Int)] -> [Int]
cnt n as bs = runST $ do
  vec <- VM.replicate n 0
  forM_ as $ \(c,p) -> VM.modify vec (+c) p
  forM_ bs $ \(c,p) -> VM.modify vec (+c) p

  forM [0..n-1] $ \i -> VM.read vec i

main :: IO ()
main = do
  s <- getLine --traceShowM (hs, scanr1 min hs)
  let ls = fromLeft s 0 0 0
      rs = fromRight (reverse s) (length s) 0 0 0
  forM_ (cnt (length s) ls rs) $ \x -> putStr $ (show x) ++ " "
  putStrLn ""
