#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
set<int> ps[2], s[2];
char c[N];
int n, ans = 0, Ans[N], p[N];
void solve(int t) {
  s[0] = ps[0], s[1] = ps[1];
  int res = 0;
  p[1] = *s[t].begin();
  s[t].erase(p[1]);
  for (int i = 2; i <= n; i++) {
    t ^= 1;
    auto p1 = s[t].upper_bound(p[i - 1]);
    if (p1 == s[t].end()) {
      ++res;
      p[i] = *s[t].begin();
      s[t].erase(p[i]);
    } else {
      auto p2 = s[t ^ 1].upper_bound(*p1);
      if (p2 != s[t ^ 1].end()) {
        p[i] = *p1;
        s[t].erase(p1);
      } else {
        auto t1 = s[t].begin();
        auto t2 = s[t ^ 1].begin();
        if (t1 != s[t].end() || t2 != s[t ^ 1].end()) {
          if ((*t1) < (*t2)) {
            ++res;
            p[i] = *t1;
            s[t].erase(t1);
          } else {
            p[i] = *p1;
            s[t].erase(p1);
          }
        } else {
          p[i] = *p1;
          s[t].erase(p1);
        }
      }
    }
  }
  if (res < ans) {
    ans = res;
    for (int i = 1; i <= n; i++) Ans[i] = p[i];
  }
}
void solve1(int t) {
  s[0] = ps[0], s[1] = ps[1];
  int res = 0;
  p[1] = *s[t].begin();
  s[t].erase(p[1]);
  for (int i = 2; i <= n; i++) {
    t ^= 1;
    auto cur = s[t].upper_bound(p[i - 1]);
    if (cur != s[t].end()) {
      p[i] = *cur;
      s[t].erase(cur);
    } else {
      res++;
      p[i] = *s[t].begin();
      s[t].erase(p[i]);
    }
  }
  if (res < ans) {
    ans = res;
    for (int i = 1; i <= n; i++) Ans[i] = p[i];
  }
}
int main() {
  scanf("%s", c + 1);
  ans = n = strlen(c + 1);
  for (int i = 1; i <= n; i++) {
    if (c[i] == 'L') {
      ps[0].insert(i);
    } else {
      ps[1].insert(i);
    }
  }
  if (ps[0].size() != ps[1].size()) {
    solve(ps[1].size() > ps[0].size());
    solve1(ps[1].size() > ps[0].size());
  } else {
    solve(0);
    solve(1);
    solve1(0);
    solve1(1);
  }
  printf("%d\n", ans);
  for (int i = 1; i <= n; i++) printf("%d ", Ans[i]);
  puts("");
  return 0;
}
