/**
 * code generated by JHelper
 * More info: https://github.com/AlexeyDmitriev/JHelper
 * @author lstd
 */

#include <iostream>
#include <fstream>

#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <bitset>
#include <random>
#include <chrono>
#include <complex>
#include <algorithm>
#include <utility>
#include <functional>
#include <cmath>
#include <cstring>
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <ctime>

using namespace std;

#define sqr(x) ((x)*(x))
#define mp make_pair
#define pb push_back
#define FOR(i,a,b) for (int i = (a); i <= (b); i++)
#define RE(i, n) FOR(i,1,n)
#define REP(i,n) FOR(i, 0, (int)(n)-1)
#define fst first
#define snd second

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, int> pli;
typedef pair<ll, ll> pll;
typedef long double ld;

string to_string(string s) {
    return '"' + s + '"';
}

string to_string(const char* s) {
    return to_string((string) s);
}

string to_string(bool b) {
    return (b ? "true" : "false");
}

template <typename A, typename B>
string to_string(pair<A, B> p) {
    return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}

template <typename A>
string to_string(A v) {
    bool first = true;
    string res = "{";
    for (const auto &x : v) {
        if (!first) {
            res += ", ";
        }
        first = false;
        res += to_string(x);
    }
    res += "}";
    return res;
}



void debug_out() { cerr << endl; }

template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
    cerr << " " << to_string(H);
    debug_out(T...);
}

int XMOV[4] = {0, 0, 1, -1};
int YMOV[4] = {1, -1, 0, 0};

#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif

using namespace std;

vector<int> l, r;

int closer_L (int idx){
	auto it = lower_bound(l.begin(), l.end(), idx);
	return *(it);
}

int closer_R (int idx){
	auto it = lower_bound(r.rbegin(), r.rend(), idx, greater<int>());
	return *(it);
}

int mmult(int a, int b){
    return ((a%2) * (b%2))%2;
}

int mpow(int a, int b){
    if (b == 0)
        return 1;
    else if (b % 2 == 0)
        return mpow(mmult(a, a), b/2)%2;
    else
        return mmult(mpow(a, b-1), a);
}

class DGatheringChildren {
public:
	void solve(std::istream& in, std::ostream& out) {
		string s;
		int maxstep = 0;
		in >> s;
        vector<int> squares(s.size(), 1);
		for (int i = 0; i < s.size(); i++)
			if (s[i] == 'L')
				l.pb(i);
			else
				r.pb(i);

        for(int i = 0; i < s.size(); i++){
            if (s[i] == 'L'){
                int closer_r = closer_R(i);
                squares[i]--;
                closer_r++;
                int lastpos = closer_r;
                int diff = i - closer_r;
                lastpos += ((maxstep%2) - (diff%2))%2;
                squares[lastpos]++;
            }else {
                int closer_l = closer_L(i);
                squares[i]--;
                closer_l--;
                int diff = closer_l - i;
                int lastpos = closer_l;
                lastpos += diff%2;
                squares[lastpos]++;
            }
        }
        for (int i = 0; i < squares.size(); i++)
            out << squares[i] << " ";
        l.clear();
        r.clear();
	}
};

int main() {
	DGatheringChildren solver;
	std::istream& in(std::cin);
	std::ostream& out(std::cout);
	solver.solve(in, out);
	return 0;
}

Measured memory_bytes: 1532