#include <bits/stdc++.h>
#define REP(i, n) for(int i = 0, i##_len = (n); i < i##_len; ++i)
#define REPS(i, _s, n) for(int i = _s, i##_len = (n); i < i##_len; ++i)
#define ALL(x) (x).begin(), (x).end()
using namespace std;

#define repi(itr, ds) for(auto itr = ds.begin(); itr != ds.end(); itr++)
// vector
template <typename T>
istream &operator>>(istream &is, vector<T> &vec) {
  for(T &x : vec) is >> x;
  return is;
}
// pair
template <typename T, typename U>
ostream &operator<<(ostream &os, pair<T, U> &pair_var) {
  os << "(" << pair_var.first << ", " << pair_var.second << ")";
  return os;
}
// vector
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &vec) {
  os << "{";
  for(int i = 0; i < vec.size(); i++) {
    os << vec[i] << (i + 1 == vec.size() ? "" : ", ");
  }
  os << "}\n   ";
  return os;
}
// map
template <typename T, typename U>
ostream &operator<<(ostream &os, map<T, U> &map_var) {
  os << "{";
  repi(itr, map_var) {
    os << *itr;
    itr++;
    if(itr != map_var.end()) os << ", ";
    itr--;
  }
  os << "}";
  return os;
}
// set
template <typename T>
ostream &operator<<(ostream &os, set<T> &set_var) {
  os << "{";
  repi(itr, set_var) {
    os << *itr;
    itr++;
    if(itr != set_var.end()) os << ", ";
    itr--;
  }
  os << "}";
  return os;
}

#define DUMPOUT cerr

void dump_func() { DUMPOUT << endl; }
template <class Head, class... Tail>
void dump_func(Head &&head, Tail &&... tail) {
  DUMPOUT << head;
  if(sizeof...(Tail) > 0) {
    DUMPOUT << ", ";
  }
  dump_func(std::move(tail)...);
}
#ifdef DEBUG_
#define DEB
#define dump(...)                                                             \
  DUMPOUT << "  " << string(#__VA_ARGS__) << ": "                             \
          << "[" << to_string(__LINE__) << ":" << __FUNCTION__ << "]" << endl \
          << "    ",                                                          \
      dump_func(__VA_ARGS__)
#else
#define DEB if(false)
#define dump(...)
#endif

typedef long long int ll;
const int MOD = 1e9 + 7;
const int INF = 1e9;

int main() {
  string S;
  cin >> S;

  auto RL_index = vector<int>();
  auto RL_count = vector<int>();
  auto RL_weight = vector<int>();

  char prev = 'x';
  int cnt = 0;
  int R_cnt = 0;
  int L_cnt = 0;
  int i = 0;
  bool flag = true;
  for(char c : S) {
    cnt++;
    if(c == 'R') R_cnt++;
    if(c == 'L') L_cnt++;
    if(prev == 'R' && c == 'L') {
      RL_index.push_back(i - 1);
    }
    if(i == S.length() - 1) {
      RL_count.push_back(cnt);
      dump("last", cnt, R_cnt, L_cnt);
      if(cnt % 2 == 0) {
        RL_weight.push_back(0);
      } else if(R_cnt > L_cnt && R_cnt % 2 == 1 || L_cnt > R_cnt && L_cnt % 2 == 0) {
        RL_weight.push_back(1);
      } else {
        RL_weight.push_back(2);
      }
    }
    if(prev == 'L' && c == 'R') {
      cnt--;
      R_cnt--;
      dump("LR", cnt, R_cnt, L_cnt);
      RL_count.push_back(cnt);
      if(cnt % 2 == 0) {
        RL_weight.push_back(0);
      } else if(R_cnt > L_cnt && R_cnt % 2 == 1 || L_cnt > R_cnt && L_cnt % 2 == 0) {
        RL_weight.push_back(1);
      } else {
        RL_weight.push_back(2);
      }
      cnt = 1;
      R_cnt = 1;
      L_cnt = 0;
      flag = false;
    }
    i++;
    prev = c;
  }
  dump(RL_count);
  dump(RL_index);
  dump(RL_weight);

  auto ans = vector<int>(S.length(), 0);
  REP(i, RL_index.size()) {
    if(RL_weight[i] == 0) {
      ans[RL_index[i]] = RL_count[i] / 2;
      ans[RL_index[i] + 1] = RL_count[i] / 2;
    } else if(RL_weight[i] == 1) {
      ans[RL_index[i]] = RL_count[i] / 2 + 1;
      ans[RL_index[i] + 1] = RL_count[i] / 2;
    } else {
      ans[RL_index[i]] = RL_count[i] / 2;
      ans[RL_index[i] + 1] = RL_count[i] / 2 + 1;
    }
  }
  REP(i, S.length()) { cout << ans[i] << " "; }
  cout << endl;
}


Measured memory_bytes: 1912