#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;

template <typename T>
using ordered_set =tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

#define ld long double
#define pb push_back
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define ll long long
#define ull unsigned long long
#define watch(x) cout << "debug : " << #x << " -> " << x << endl; 

//globals
ll const mod = 1e9+7;
ll const size_1d = 1e6 + 7;
ll const size_2d = 1e3 + 7;

//functions
ll power(ll x, ll y, ll mod = 2e18){ ll ans = 1;x %= mod;while(y){if(y&1)ans = (x * ans) % mod;x = (x * x) % mod;y >>= 1;}return ans;}
ll modInverse(ll a, ll m){ll m0 = m;ll y = 0, x = 1;if (m == 1) return 0;while (a > 1){ ll q = a / m;ll t = m;m = a % m,a = t;t = y;y = x - q * y;x = t;}if(x < 0) x += m0;return x;} 
ll gcdext(ll a,ll b,ll *x = 0, ll *y = 0){if(a == 0){*x = 0;*y = 1;return b;}ll x1,y1;ll gcd1 = gcdext(b%a,a,&x1,&y1);*x = y1 - (b/a)*x1;*y = x1;return gcd1;}
int randomize(){return (rand()%10000);} 

// CODE STARTS HERE
int ans[size_1d];
int main() {
  IOS;

  string s;cin >> s;
  int countleft = 0;
  int countright = 0;
  bool flag = false;
  int index = -1;
  for (int i = 0; i < s.length(); ++i)
  {
    if(s[i] == 'R'){
      if(flag){
        if((countright + countleft)%2 == 0){
          ans[index] = (countright + countleft)/2;
          ans[index+1] = (countright + countleft)/2;
        }
        else{
          int m = max(countleft,countright)-1;
          if((m-1)%2 == 0){
            if(countright > countleft){
              ans[index] = (countright + countleft)/2;
              ans[index+1] = (countright + countleft)/2 + 1;
            }
            else{
              ans[index] = (countright + countleft)/2 + 1;
              ans[index+1] = (countright + countleft)/2;             
            }
          }
          else{
            if(countright > countleft){
              ans[index] = (countright + countleft)/2 + 1;
              ans[index+1] = (countright + countleft)/2;
            }
            else{
              ans[index] = (countright + countleft)/2;
              ans[index+1] = (countright + countleft)/2 + 1;             
            }
          }
        }
        countright = 0;
        countleft = 0;
        flag = false;
      }
      countright++;
    }
    else{
      if(!flag)
        index = i-1;
      countleft++;
      flag = true;
    }
  }
  // watch(index)
  if(flag){ 
    if((countright + countleft)%2 == 0){
      ans[index] = (countright + countleft)/2;
      ans[index+1] = (countright + countleft)/2;
    }
    else{
      int m = (max(countleft,countright))-1;
      if((m-1)%2 == 0){
        if(countright > countleft){
          ans[index] = (countright + countleft)/2;
          ans[index+1] = (countright + countleft)/2 + 1;
        }
        else{
          ans[index] = (countright + countleft)/2 + 1;
          ans[index+1] = (countright + countleft)/2;             
        }
      }
      else{
        if(countright > countleft){
          ans[index] = (countright + countleft)/2 + 1;
          ans[index+1] = (countright + countleft)/2;
        }
        else{
          ans[index] = (countright + countleft)/2;
          ans[index+1] = (countright + countleft)/2 + 1;             
        }
      }
    }
    countright = 0;
    countleft = 0;
    flag = false;
  }
  for (int i = 0; i < s.length(); ++i)
  {
    cout << ans[i] << " ";
  }
  cout << endl;

  return 0;
}

Measured memory_bytes: 1104