#include<bits/stdc++.h>
using namespace std;

void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}

template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}

#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif

#define REP(i,n) for(int i=0;i<(n);i++)
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define FORD(i,a,b) for(int i=(a);i>=(b);i--)
#define A first
#define B second
#define MOD 1000000007

typedef pair<int,int> ii;
typedef vector<ii> vii;
typedef long long ll;

int mulmd(ll a, ll b){
    ll ret = (a * b) % MOD;
    return (int)ret;
}

inline int power(ll x, ll y, int p)
{
    ll res = 1;
    x = x % p;
    while (y > 0)
    {
        if (y & 1)
            res = mulmd(res,x);
        y = y>>1;
        x = mulmd(x,x);
    }
    return (int)res;
}

int submd(ll a, ll b){
    ll ret = a-b;
    if(ret<0){
        ret+=MOD;
    }
    return (int)ret;
}

int addmd(ll a, ll b){
    ll ret = (a + b) % MOD;
    return (int)ret;
}

int phi(int n){
    int result = n;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            while(n%i==0){
                n=n/i;
            }
            result-=result/i;
        }
    }
    if(n>1) result-=result/n;
    return result;
}

const int N = 1e5 + 5;


/**
    Check out for boundary cases, (n = 1 or n = 0)
    check for integer overflow

**/

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    string s;
    cin >> s;
    int n = s.size();
    vector<int> v;
    int f = 0;
    int cnt = 0;
    FOR(i, 0, n - 1){
        if(s[i] == 'R' && f == 0) cnt++;
        else if(s[i] == 'L' && f == 0) v.push_back(cnt), cnt = 1, f = 1;
        else if(s[i] == 'L' && f == 1) cnt++;
        else if(s[i] == 'R' && f == 1) v.push_back(cnt), cnt = 1, f = 0;
    }
    v.push_back(cnt);
    int mx = -1;
    for(int i = 0; i < v.size(); i++){
        mx = max(mx, v[i] - 1);
    }
    vector<ii> ans;
    for(int i = 0; i < v.size() - 1; i += 2){
        //debug(v[i]);
        //debug(v[i + 1]);
        if((v[i] + v[i + 1])%2 == 0) ans.push_back({(v[i] + v[i + 1])/2, (v[i]+v[i + 1])/2});
        else {
            int m = max(v[i], v[i + 1]) - 1;
            int f = (v[i] + v[i + 1])/2;
            int s = v[i] + v[i + 1] - f;
            if(m % 2 == mx % 2){
                if(v[i] < v[i + 1]){
                    ans.push_back({f, s});
                }
                else ans.push_back({s, f});
            }
            else {
                if(v[i] < v[i + 1]){
                    ans.push_back({s, f});
                }
                else ans.push_back({f, s});
            }
        }
        //debug(ans);
    }
    if(mx % 2 == 1){
        for(int i = 0; i < ans.size(); i++){
            int temp = ans[i].A;
            ans[i].A = ans[i].B;
            ans[i].B = temp;
        }
    }
    int k = 0;
    vector<int> vals(n, 0);
    for(int i = 0; i < n - 1; i++){
        if(s[i] == 'R' && s[i + 1] == 'L') {
            vals[i] = ans[k].A;
            vals[i + 1] = ans[k].B;
            k++;
        }
    }
    for(int i = 0; i < n; i++){
        cout << vals[i] << " ";
    }


}



Measured memory_bytes: 1864