import std.stdio, std.string, std.range, std.conv, std.array, std.algorithm, std.math, std.typecons;

void main() {
    auto S = readln.chomp;

    long[] Ls;
    long[] Rs;
    foreach (i; 0..S.length) {
        if (S[i] == 'L') Ls ~= i;
        else Rs ~= i;
    }
    auto Lss = assumeSorted(Ls);
    auto Rss = assumeSorted(Rs);
    
    auto result = new long[S.length];

    foreach (i; 0..S.length) {
        // i番目の子供が10^100回後にどこにいるか
        if (S[i] == 'L') {
            // Rsの中でi未満のもの
            auto j = Rss.lowerBound(i).back;

            // このRまでにi-j回移動している
            if ((i-j) % 2 == 0) {
                // 残り移動回数が偶数回なら、このマスで終わる
                result[j]++;
            } else {
                // 奇数回なら反対側で終わる
                result[j+1]++;
            }
        } else {
            // Lsの中でiを超えるもの
            auto j = Lss.upperBound(i).front;
            // このLまでにj-i回移動している
            if ((j-i) % 2 == 0) {
                // 残り移動回数が偶数回なら、このマスで終わる
                result[j]++;
            } else {
                // 奇数回なら反対側で終わる
                result[j-1]++;
            }
        }
    }
    result.map!(to!string).join(" ").writeln;
}

