// Problem : D - Gathering Children
// Contest : AtCoder Beginner Contest 136
// URL : https://atcoder.jp/contests/abc136/tasks/abc136_d
// Memory Limit : 1024.000000 MB 
// Time Limit : 2000.000000 milisec 
// Powered by CP Editor (https://github.com/coder3101/cp-editor)

#include<bits/stdc++.h>
#define pb push_back
#define int long long
#define vi vector<int>
#define pii pair<int,int>
#define m_p(x,y) make_pair(x,y)
#define vp vector<pair<int,int>>
#define setbits(x) __builtin_popcount(x)
#define f first
#define se second
using namespace std;
template<typename T1,typename T2>istream &operator>>(istream &is, vector<pair<T1,T2>> &v) { for (pair<T1,T2> &t : v) is >> t.f>>t.se; return is; }
template<typename T>istream &operator>>(istream &is, vector<T> &v) { for (T &t : v) is >> t; return is; }
template<typename T>ostream &operator<<(ostream &os, const vector<T> &v) { for (const T &t : v) {os << t <<" ";} os << '\n'; return os; }
double pi=acos(-1.0);
int md=1000000007;
int abst(int a)
{return a<0?-a:a;}
struct HASH{
  size_t operator()(const pii &x)const{
    return (size_t) x.first * 37U + (size_t) x.second;}};

struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }

    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};

int Pow(int n,int x){int ans=1;
 while(x>0)
 {if(x&1)ans=(ans*n)%md;n=(n*n)%md;x=x>>1;}
 return ans;}

 vi fact,inv;
void inverse(int n)
{inv.resize(n+1);inv[0]=1;
for(int i=1;i<=n;i++)inv[i]=Pow(fact[i],md-2);}
void factorial(int n)
{fact.resize(n+1);fact[0]=1;
for(int i=1;i<=n;i++)fact[i]=(fact[i-1]*i)%md;}
int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a<b?a:b;}
void solve()
{
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
string s;
cin>>s;
//int dp[s.size()];
int ans[s.size()];
memset(ans,0,sizeof(ans));
int l=-1,r=-1;
int store[s.size()],store2[s.size()];
memset(store,-1,sizeof(store));
memset(store2,-1,sizeof(store2));
for(int i=0;i<s.size();i++)
{
	if(s[i]=='R')
	r=i;
	else
	{
		store2[i]=r;
	}
}
for(int i=s.size()-1;i>=0;i--)
{
	if(s[i]=='R')
	{
		store[i]=l;
	}
	else
	{
		l=i;
	}
}
for(int i=0;i<s.size()-1;i++)
if(s[i]=='R' && s[i+1]!='L')
ans[i]=0;
for(int i=s.size()-1;i>=0;i--)
if(s[i]=='L' && s[i-1]!='R')
ans[i]=0;
int oddc=0,evenc=0;
for(int i=0;i<s.size();i++)
{
	if(s[i]=='L' && s[i-1]=='R')
	{
		ans[i]=evenc;
		evenc=0;
		ans[i-1]=oddc;
		oddc=0;
	}
	else if(s[i]=='R')
	{
		int d=store[i]-i;
		int xt=10000000-d;
		if(xt&1)
		oddc++;
		else
		evenc++;
	}
}
for(int i=s.size()-1;i>=0;i--)
{
	if(s[i]=='R' && s[i+1]=='L')
	{
		ans[i]+=evenc;
		evenc=0;
		ans[i+1]+=oddc;
		oddc=0;
	}
	else if(s[i]=='L')
	{
		int d=i-store2[i];
		int xt=10000000-d;
		if(xt&1)
		oddc++;
		else
		evenc++;
	}
}
for(int i=0;i<s.size();i++)
cout<<ans[i]<<" ";
}

int32_t main(){
ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL);
int t;
//cin>>t;
t=1;
while(t--)
{
    solve();
}
}


Measured memory_bytes: 3024