let s = (stdin.ReadLine()+"R").ToCharArray()

let addChildren i a b map=
    let avg = (a+b)/2
    let point = i-b
    match a%2=0,b%2=0 with
    |true,true|false,false -> map|>Map.add point avg|>Map.add (point+1) avg
    |false,true -> map|>Map.add point (avg+1)|>Map.add (point+1) avg
    |true,false ->  map|>Map.add point avg|>Map.add (point+1) (avg+1)

let childrenMap =
    let rec mapChildren i repeatCount chunkCount chunkCount2 map =
        if i = s.Length-1 then map
        else
        match s.[i]=s.[i+1],repeatCount%2 with
        |true,_ -> mapChildren (i+1) repeatCount (chunkCount+1) chunkCount2 map
        |false,0 -> mapChildren (i+1) (repeatCount+1) 1 chunkCount map
        |false,1 -> mapChildren (i+1) (repeatCount+1) 1 1 (map|>addChildren i chunkCount2 chunkCount)
    mapChildren 0 0 1 1 Map.empty

[0..s.Length-2]
|>List.fold (fun total i ->
    match childrenMap|>Map.tryFind i with
    |Some v -> total + string v + " "
    |None -> total + "0 "
) ""
|>stdout.WriteLine