// Original C++ solution (slower):
#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;



        

    }











}

// Optimized solution to the same problem (faster):
#include<stdio.h>

#include<string.h>





int main()

{

	char s[100005];

	int a[100005] = {0}, i=0, bsr,bsl, len;

	scanf("%s", s);

	len = strlen(s);

	while (i < len-1)

	{

		for (bsr=0; (bsr+i) < len-1; bsr++)/*寻找RL字符串*/

		{

			if ((s[i + bsr] == 'R') && (s[i + bsr + 1] == 'L'))

			{

				if (bsr % 2 == 0)

				{

					a[i + bsr] += (bsr / 2 + 1); a[i + bsr + 1] += bsr / 2;

				}

				else

				{

					a[i + bsr] += ((bsr + 1) / 2); a[i + bsr + 1] += ((bsr + 1) / 2);

				}

				for (bsl = 1; (i + bsr + bsl) < len; bsl++)

				{

					if (s[i + bsr + bsl] == 'R')

					{

						bsl--;

						break;

					}

					if ((i + bsr + bsl) == (len - 1))

						break;

				}

				if (bsl % 2 == 1)

				{

					a[i + bsr] += bsl / 2; a[i + bsr + 1] += (bsl / 2 + 1);

				}

				else

				{

					a[i + bsr] += bsl / 2; a[i + bsr + 1] += bsl / 2;

				}

				i = i + bsr + bsl + 1;

				break;

			}

		}

	}

	for (i = 0; i < len-1; i++)

		printf("%d ", a[i]);

	printf("%d\n", a[i]);

}

// Fastest known solution for this problem: