import java.util.*

fun main(arr:Array<String>) {
    dic[true] = mutableListOf()
    dic[true]!!.addAll(map.indices.map { null })
    dic[false] = mutableListOf()
    dic[false]!!.addAll(map.indices.map { null })
    for(i in map.indices.reversed()) {
        if(map[i] == 'L') {
            nearL.add(i)
        } else {
            nearL.add(nearL.last())
        }
    }
    nearL.reverse()
    for(i in map.indices) {
        if(map[i] == 'R') {
            nearR.add(i)
        } else {
            nearR.add(nearR.last())
        }
    }
    val ans = map.indices.map { 0 }.toMutableList()
    for(i in map.indices) {
        val pos = getPos(i%2==0, i)
        ans[pos] += 1
    }
    println(ans.joinToString(" "))
}

val map = readLine()!!.map { it }
val nearL = mutableListOf<Int>()
val nearR = mutableListOf<Int>()
val dic = mutableMapOf<Boolean, MutableList<Int?>>()
fun getPos(startEven:Boolean, pos:Int):Int {
    if(map[pos] == 'R') {
        val tmp = nearL[pos]
        if((startEven && tmp % 2 == 1) || (tmp % 2 == 0 && !startEven)) {
            return tmp - 1
        } else {
            return tmp
        }
    } else {
        val tmp = nearR[pos]
        if((startEven && tmp % 2 == 1) || (tmp % 2 == 0 && !startEven)) {
            return tmp + 1
        } else {
            return tmp
        }
    }
}

