from bisect import bisect_left



s = eval(input())

n = len(s)



ans = [0] * n

p = []

for i in range(n - 1):

    if s[i] == 'R' and s[i + 1] == 'L':

        p.append(i)

        ans[i] += 1

        ans[i + 1] += 1



for i, c in enumerate(s):

    if ans[i] > 0:

        continue

    if c == 'L':

        to = bisect_left(p, i) - 1

    else:

        to = bisect_left(p, i)

    # dist = abs(i - p[to])

    # print(p[to], dist)

    # if dist % 2 == 0:

    if (i - p[to]) % 2 == 0:

        ans[p[to]] += 1

    else:

        ans[p[to] + 1] += 1

print((*ans))

# https://atcoder.jp/contests/abc136/submissions/6696720

# ほぼ写経、コメントをつけた



s = eval(input())

n = len(s)

ans = [0] * n



cnt_l = 0  # RLのR上に来るまでに出会ったLの個数(直前のRLのLを含む)

cnt_r = 0  # RLのL上に来るまでに出会ったRの個数(直前のRLのRを含む,最初を除く)

curr = 'R'  # これが連続している間は、ansに計上しない

last_idx = 0  # RR[RL]LLLLLL <- このL列が集まるのは直前のRL, 直前のRLのLのidx



for idx, char in enumerate(s):

    if curr == 'R':

        if char == 'R':

            cnt_r += 1

            continue

        else:

            ans[idx] += cnt_r // 2  # ans[idx]: RLのL,偶数距離のRが集まる,RRR[RL]ならRrR[rL](大文字R)がLに集まる

            ans[idx - 1] += cnt_r - (cnt_r // 2)  # ans[idx-1]: RLのR,奇数距離のRが集まる,RRRRLならrRr[RL](大文字R)がR集まる

            last_idx = idx

            curr = 'L'

            cnt_r = 0

            cnt_l = 1  # Lの上に来たので、cnt_lを増やす

            continue

    else:

        if char == 'L':

            cnt_l += 1

            continue

        else:

            ans[last_idx - 1] += cnt_l // 2  # ans[last_idx - 1]: RLのR,偶数距離のLが集まる,[RL]LLなら[Rl]Ll(大文字L)がRに集まる

            ans[last_idx] += cnt_l - (cnt_l // 2)  # ans[last_idx]: RLのL,偶数距離のLが集まる,[RL]LLなら[RL]lL(大文字L)がLに集まる

            curr = 'R'

            cnt_l = 0

            cnt_r = 1  # Rの上に来たので、cnt_rを増やす



ans[last_idx - 1] += cnt_l // 2

ans[last_idx] += cnt_l - (cnt_l // 2)

# 末尾[RL]LLLLLLLLLのL列は、RLが来ないために計上されていないので、計上する



print((*ans))



# ループに入った人は、左右どちらかのLRに収まる

from bisect import bisect_left

s = eval(input())
n = len(s)
ans = [0] * n
p = []
for i in range(n - 1):
    if s[i] == "R" and s[i + 1] == "L":
        p.append(i)
        ans[i] += 1
        ans[i + 1] += 1
for i, c in enumerate(s):
    if ans[i] > 0:
        continue
    if c == "L":
        to = bisect_left(p, i) - 1
    else:
        to = bisect_left(p, i)
    # dist = abs(i - p[to])
    # print(p[to], dist)
    # if dist % 2 == 0:
    if (i - p[to]) % 2 == 0:
        ans[p[to]] += 1
    else:
        ans[p[to] + 1] += 1
print((*ans))

# https://atcoder.jp/contests/abc136/submissions/6696720
# ほぼ写経、コメントをつけた
s = eval(input())
n = len(s)
ans = [0] * n
cnt_l = 0  # RLのR上に来るまでに出会ったLの個数(直前のRLのLを含む)
cnt_r = 0  # RLのL上に来るまでに出会ったRの個数(直前のRLのRを含む,最初を除く)
curr = "R"  # これが連続している間は、ansに計上しない
last_idx = 0  # RR[RL]LLLLLL <- このL列が集まるのは直前のRL, 直前のRLのLのidx
for idx, char in enumerate(s):
    if curr == "R":
        if char == "R":
            cnt_r += 1
            continue
        else:
            ans[idx] += (
                cnt_r // 2
            )  # ans[idx]: RLのL,偶数距離のRが集まる,RRR[RL]ならRrR[rL](大文字R)がLに集まる
            ans[idx - 1] += cnt_r - (
                cnt_r // 2
            )  # ans[idx-1]: RLのR,奇数距離のRが集まる,RRRRLならrRr[RL](大文字R)がR集まる
            last_idx = idx
            curr = "L"
            cnt_r = 0
            cnt_l = 1  # Lの上に来たので、cnt_lを増やす
            continue
    else:
        if char == "L":
            cnt_l += 1
            continue
        else:
            ans[last_idx - 1] += (
                cnt_l // 2
            )  # ans[last_idx - 1]: RLのR,偶数距離のLが集まる,[RL]LLなら[Rl]Ll(大文字L)がRに集まる
            ans[last_idx] += cnt_l - (
                cnt_l // 2
            )  # ans[last_idx]: RLのL,偶数距離のLが集まる,[RL]LLなら[RL]lL(大文字L)がLに集まる
            curr = "R"
            cnt_l = 0
            cnt_r = 1  # Rの上に来たので、cnt_rを増やす
ans[last_idx - 1] += cnt_l // 2
ans[last_idx] += cnt_l - (cnt_l // 2)
# 末尾[RL]LLLLLLLLLのL列は、RLが来ないために計上されていないので、計上する
print((*ans))
# ループに入った人は、左右どちらかのLRに収まる

-from bisect import bisect_left - +# https://atcoder.jp/contests/abc136/submissions/6696720 +# ほぼ写経、コメントをつけた -p = [] -for i in range(n - 1): -    if s[i] == "R" and s[i + 1] == "L": -        p.append(i) -        ans[i] += 1 -        ans[i + 1] += 1 -for i, c in enumerate(s): -    if ans[i] > 0: -        continue -    if c == "L": -        to = bisect_left(p, i) - 1 +cnt_l = 0  # RLのR上に来るまでに出会ったLの個数(直前のRLのLを含む) +cnt_r = 0  # RLのL上に来るまでに出会ったRの個数(直前のRLのRを含む,最初を除く) +curr = "R"  # これが連続している間は、ansに計上しない +last_idx = 0  # RR[RL]LLLLLL <- このL列が集まるのは直前のRL, 直前のRLのLのidx +for idx, char in enumerate(s): +    if curr == "R": +        if char == "R": +            cnt_r += 1 +            continue +        else: +            ans[idx] += ( +                cnt_r // 2 +            )  # ans[idx]: RLのL,偶数距離のRが集まる,RRR[RL]ならRrR[rL](大文字R)がLに集まる +            ans[idx - 1] += cnt_r - ( +                cnt_r // 2 +            )  # ans[idx-1]: RLのR,奇数距離のRが集まる,RRRRLならrRr[RL](大文字R)がR集まる +            last_idx = idx +            curr = "L" +            cnt_r = 0 +            cnt_l = 1  # Lの上に来たので、cnt_lを増やす +            continue -        to = bisect_left(p, i) -    # dist = abs(i - p[to]) -    # print(p[to], dist) -    # if dist % 2 == 0: -    if (i - p[to]) % 2 == 0: -        ans[p[to]] += 1 -    else: -        ans[p[to] + 1] += 1 +        if char == "L": +            cnt_l += 1 +            continue +        else: +            ans[last_idx - 1] += ( +                cnt_l // 2 +            )  # ans[last_idx - 1]: RLのR,偶数距離のLが集まる,[RL]LLなら[Rl]Ll(大文字L)がRに集まる +            ans[last_idx] += cnt_l - ( +                cnt_l // 2 +            )  # ans[last_idx]: RLのL,偶数距離のLが集まる,[RL]LLなら[RL]lL(大文字L)がLに集まる +            curr = "R" +            cnt_l = 0 +            cnt_r = 1  # Rの上に来たので、cnt_rを増やす +ans[last_idx - 1] += cnt_l // 2 +ans[last_idx] += cnt_l - (cnt_l // 2) +# 末尾[RL]LLLLLLLLLのL列は、RLが来ないために計上されていないので、計上する +# ループに入った人は、左右どちらかのLRに収まる