// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

const int N=1e5+7;

struct stu{

	int start,end;

}arr[N];

int ans[N];

int main(){

	memset(ans,0,sizeof(ans));

	string s;

	cin>>s;

	int n=s.length();

	bool flag=false ;

	int pos=0;

	for(int i=0;i<n ;i++){

		if(s[i]=='R'){

			if(!flag){

				arr[++pos].start=i;

				arr[pos].end=i;

				flag=true;

			}

			else arr[pos].end=i;

		}

		else	flag=false ;

	}

	arr[pos+1].start=n;

	for(int i=1;i<=pos;i++){

		int disr=arr[i].end-arr[i].start+1;//r的长度

		int disl=arr[i+1].start-arr[i].end-1;

		if(disr&1){

			ans[arr[i].end]+=disr/2 +1;

			ans[arr[i].end+1]+=disr/2;

		}

		else {

			ans[arr[i].end]+=disr/2;

			ans[arr[i].end+1]+=disr/2;			

		}

		if(disl&1){

			ans[arr[i].end]+=disl/2;

			ans[arr[i].end+1]+=disl/2+1;			

		}

		else {

			ans[arr[i].end]+=disl/2;

			ans[arr[i].end+1]+=disl/2;

		}

	}

	for(int i=0;i<n;i++) cout<<ans[i]<<" ";

	

	return 0;

} 

// Faster C++ solution for the same problem (measured speedup: 1.3689266075536732x):
#include<bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp>

#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;

using namespace std;

#define Khela ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

#define ll long long int

#define llu long long unsigned int

#define pf printf

#define sf scanf

#define f first

#define s second

#define pb push_back

#define mk make_pair

#define pii pair<int ,int>

#define PII pair<ll ,ll>

 

int dx8[] = {0, 0, 1, 1, 1, -1, -1, -1};

int dy8[] = {1,-1, 1, -1, 0, 0, -1, 1};

int dx4[] = {0, 0, 1, -1};

int dy4[] = {1, -1, 0, 0};

 

typedef tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag,tree_order_statistics_node_update>ordered_set;

int Set(int N,int pos){return N=N | (1<<pos);}

int reset(int N,int pos){return N= N & ~(1<<pos);}

bool check(int N,int pos){return (bool)(N & (1<<pos));}

const int Max=1e9+100;

const ll  MAX=1e18+500;

const int sz=1e3+100;

 

int main()

{

    Khela

    int a,b,c,i,j,k,q,p,x,y,ct,ct1,m,l,r,x1,y1,mn,h,sum1,in,z,mid,n,mx;

    char ch;

    double d;

    string str1,str2,str;

    bool bl,bl1;

    int t,cs=1;

    while(cin>>str)

    {

         int len=str.length();

         int sum[len];

         memset(sum,0,sizeof sum);

         vector<pii>R,L;

         ct=1;

         for(i=1;i<len;i++){

             if(str[i]==str[i-1] && str[i]=='R') ++ct;

             else{

                 if(ct>0) R.push_back({ct,i-1});

                 ct=0;

                 if(str[i]=='R') ct=1;

                 else ct=0;

             }

         }

         if(ct>0) R.push_back({ct,i-1});



          ct=1;

          for(i=len-2;i>=0;i--){

             if(str[i]==str[i+1] && str[i]=='L') ++ct;

             else{

                 if(ct>0) L.push_back({ct,i+1});

                 ct=0;

                 if(str[i]=='L') ct=1;

                 else ct=0;

             }

         }

         if(ct>0) R.push_back({ct,i+1});

         

         reverse(L.begin(),L.end());

         int siz=L.size();

         

         i=0;

         while(i<siz){

             p=R[i].f-L[i].first;

             ll tot=R[i].f+L[i].first;

             ll  mx=max(R[i].f,L[i].first);

             x=abs(p);

             sum[R[i].second]=tot/2;

             sum[L[i].second]=tot/2;

             if(tot & 1){

                 if(p>=0) sum[R[i].second]+=1;

                 else sum[L[i].second]+=1;

             }



             if((mx-1) & 1) swap(sum[R[i].second],sum[L[i].second]);

             ++i;

             

         }





         for(i=0;i<len;i++) cout<<sum[i]<<" ";

         cout<<endl;



        

    }











}