from collections import defaultdict

import sys





def input(): return sys.stdin.readline().strip()

def I(): return int(eval(input()))

def LI(): return list(map(int, input().split()))

def IR(n): return [I() for i in range(n)]

def LIR(n): return [LI() for i in range(n)]

def SR(n): return [S() for i in range(n)]

def S(): return eval(input())

def LS(): return input().split()





INF = float('inf')





s = S()

n = len(s)

d = defaultdict(lambda: [0, 0])  # RL の位置 に対応する r, l の数の辞書



# 右から見ていって対応する r を探す

r = 0

i = 0

while i < n:

    if s[i:i + 2] == 'RL':

        d[i][0] = r

        r = 0

        i += 2

    elif s[i] == 'R':

        r += 1

        i += 1

    else:

        i += 1



l = 0

i = 0

s = s[::-1]

while i < n:

    if s[i:i + 2] == 'LR':

        d[n - i - 2][1] = l

        l = 0

        i += 2

    elif s[i] == 'L':

        l += 1

        i += 1

    else:

        i += 1





ans = [0] * n

for k, v in list(d.items()):

    r, l = v

    ans[k] += 1

    ans[k + 1] += 1

    if r % 2 == 0:

        ans[k] += r // 2

        ans[k + 1] += r // 2

    else:

        ans[k] += r // 2

        ans[k + 1] += r // 2 + 1

    if l % 2 == 0:

        ans[k] += l // 2

        ans[k + 1] += l // 2

    else:

        ans[k] += l // 2 + 1

        ans[k + 1] += l // 2

print((*ans))

# ランレングス圧縮の考え方で解く

import sys





def input(): return sys.stdin.readline().strip()

def I(): return int(eval(input()))

def LI(): return list(map(int, input().split()))

def IR(n): return [I() for i in range(n)]

def LIR(n): return [LI() for i in range(n)]

def SR(n): return [S() for i in range(n)]

def S(): return eval(input())

def LS(): return input().split()





INF = float('inf')



# 初期位置が R の人が最終的にどこに向かうかを考える

# 折り返し地点(移動中に訪れる初めての L) までの距離 d と操作回数の偶奇で決まる(今回の操作回数は偶数)

# d が奇数のとき 折り返し地点の 1 つ左側

# d が偶数のとき 折り返し地点

# L も同様に考える



# 連続する R と L をそれぞれグループ化することで折り返し地点を管理しやすくなる

# ランレングス圧縮と同じ





s = S()

n = len(s)

ans = [0] * n

# 初期位置が R の人について

# まとまりの人数、 その中で d が偶数の人の数、 d が奇数の人の数 を計算

r_cnt = 0

for i in range(n):

    if s[i] == 'R':

        r_cnt += 1

    else:  # 折り返し地点に来たら計算

        even_num = r_cnt // 2

        odd_num = r_cnt - even_num

        ans[i] += even_num  # 折り返し地点の人数

        ans[i - 1] += odd_num  # 折り返し地点の １ つ左の人数

        r_cnt = 0



# 初期位置が L の人について

# まとまりの人数、 その中で d が偶数の人の数、 d が奇数の人の数 を計算

l_cnt = 0

for i in range(n - 1, -1, -1):  # 右側から見ていく

    if s[i] == 'L':

        l_cnt += 1

    else:  # 折り返し地点に来たら計算

        even_num = l_cnt // 2

        odd_num = l_cnt - even_num

        ans[i] += even_num  # 折り返し地点の人数

        ans[i + 1] += odd_num  # 折り返し地点の １ つ左の人数

        l_cnt = 0

print((*ans))

from collections import defaultdict
import sys


def input():
    return sys.stdin.readline().strip()


def I():
    return int(eval(input()))


def LI():
    return list(map(int, input().split()))


def IR(n):
    return [I() for i in range(n)]


def LIR(n):
    return [LI() for i in range(n)]


def SR(n):
    return [S() for i in range(n)]


def S():
    return eval(input())


def LS():
    return input().split()


INF = float("inf")
s = S()
n = len(s)
d = defaultdict(lambda: [0, 0])  # RL の位置 に対応する r, l の数の辞書
# 右から見ていって対応する r を探す
r = 0
i = 0
while i < n:
    if s[i : i + 2] == "RL":
        d[i][0] = r
        r = 0
        i += 2
    elif s[i] == "R":
        r += 1
        i += 1
    else:
        i += 1
l = 0
i = 0
s = s[::-1]
while i < n:
    if s[i : i + 2] == "LR":
        d[n - i - 2][1] = l
        l = 0
        i += 2
    elif s[i] == "L":
        l += 1
        i += 1
    else:
        i += 1
ans = [0] * n
for k, v in list(d.items()):
    r, l = v
    ans[k] += 1
    ans[k + 1] += 1
    if r % 2 == 0:
        ans[k] += r // 2
        ans[k + 1] += r // 2
    else:
        ans[k] += r // 2
        ans[k + 1] += r // 2 + 1
    if l % 2 == 0:
        ans[k] += l // 2
        ans[k + 1] += l // 2
    else:
        ans[k] += l // 2 + 1
        ans[k + 1] += l // 2
print((*ans))

# ランレングス圧縮の考え方で解く
import sys


def input():
    return sys.stdin.readline().strip()


def I():
    return int(eval(input()))


def LI():
    return list(map(int, input().split()))


def IR(n):
    return [I() for i in range(n)]


def LIR(n):
    return [LI() for i in range(n)]


def SR(n):
    return [S() for i in range(n)]


def S():
    return eval(input())


def LS():
    return input().split()


INF = float("inf")
# 初期位置が R の人が最終的にどこに向かうかを考える
# 折り返し地点(移動中に訪れる初めての L) までの距離 d と操作回数の偶奇で決まる(今回の操作回数は偶数)
# d が奇数のとき 折り返し地点の 1 つ左側
# d が偶数のとき 折り返し地点
# L も同様に考える
# 連続する R と L をそれぞれグループ化することで折り返し地点を管理しやすくなる
# ランレングス圧縮と同じ
s = S()
n = len(s)
ans = [0] * n
# 初期位置が R の人について
# まとまりの人数、 その中で d が偶数の人の数、 d が奇数の人の数 を計算
r_cnt = 0
for i in range(n):
    if s[i] == "R":
        r_cnt += 1
    else:  # 折り返し地点に来たら計算
        even_num = r_cnt // 2
        odd_num = r_cnt - even_num
        ans[i] += even_num  # 折り返し地点の人数
        ans[i - 1] += odd_num  # 折り返し地点の １ つ左の人数
        r_cnt = 0
# 初期位置が L の人について
# まとまりの人数、 その中で d が偶数の人の数、 d が奇数の人の数 を計算
l_cnt = 0
for i in range(n - 1, -1, -1):  # 右側から見ていく
    if s[i] == "L":
        l_cnt += 1
    else:  # 折り返し地点に来たら計算
        even_num = l_cnt // 2
        odd_num = l_cnt - even_num
        ans[i] += even_num  # 折り返し地点の人数
        ans[i + 1] += odd_num  # 折り返し地点の １ つ左の人数
        l_cnt = 0
print((*ans))

-from collections import defaultdict +# ランレングス圧縮の考え方で解く +# 初期位置が R の人が最終的にどこに向かうかを考える +# 折り返し地点(移動中に訪れる初めての L) までの距離 d と操作回数の偶奇で決まる(今回の操作回数は偶数) +# d が奇数のとき 折り返し地点の 1 つ左側 +# d が偶数のとき 折り返し地点 +# L も同様に考える +# 連続する R と L をそれぞれグループ化することで折り返し地点を管理しやすくなる +# ランレングス圧縮と同じ -d = defaultdict(lambda: [0, 0])  # RL の位置 に対応する r, l の数の辞書 -# 右から見ていって対応する r を探す -r = 0 -i = 0 -while i < n: -    if s[i : i + 2] == "RL": -        d[i][0] = r -        r = 0 -        i += 2 -    elif s[i] == "R": -        r += 1 -        i += 1 -    else: -        i += 1 -l = 0 -i = 0 -s = s[::-1] -while i < n: -    if s[i : i + 2] == "LR": -        d[n - i - 2][1] = l -        l = 0 -        i += 2 -    elif s[i] == "L": -        l += 1 -        i += 1 -    else: -        i += 1 -for k, v in list(d.items()): -    r, l = v -    ans[k] += 1 -    ans[k + 1] += 1 -    if r % 2 == 0: -        ans[k] += r // 2 -        ans[k + 1] += r // 2 -    else: -        ans[k] += r // 2 -        ans[k + 1] += r // 2 + 1 -    if l % 2 == 0: -        ans[k] += l // 2 -        ans[k + 1] += l // 2 -    else: -        ans[k] += l // 2 + 1 -        ans[k + 1] += l // 2 +# 初期位置が R の人について +# まとまりの人数、 その中で d が偶数の人の数、 d が奇数の人の数 を計算 +r_cnt = 0 +for i in range(n): +    if s[i] == "R": +        r_cnt += 1 +    else:  # 折り返し地点に来たら計算 +        even_num = r_cnt // 2 +        odd_num = r_cnt - even_num +        ans[i] += even_num  # 折り返し地点の人数 +        ans[i - 1] += odd_num  # 折り返し地点の １ つ左の人数 +        r_cnt = 0 +# 初期位置が L の人について +# まとまりの人数、 その中で d が偶数の人の数、 d が奇数の人の数 を計算 +l_cnt = 0 +for i in range(n - 1, -1, -1):  # 右側から見ていく +    if s[i] == "L": +        l_cnt += 1 +    else:  # 折り返し地点に来たら計算 +        even_num = l_cnt // 2 +        odd_num = l_cnt - even_num +        ans[i] += even_num  # 折り返し地点の人数 +        ans[i + 1] += odd_num  # 折り返し地点の １ つ左の人数 +        l_cnt = 0