#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
char s[maxn];
int ql[maxn], qr[maxn];
int pl[maxn], pr[maxn], prel[maxn], prer[maxn];
bool vis[maxn];
int n, tong[4];
vector<int> ve[4];
struct node {
  int l, r, opt;
  vector<int> all;
} inter[maxn];
int cnt;
inline void sppp() {
  set<int> L, R, M;
  char c[120000];
  int d[120000];
  int i, n, p, sum, t1, t2, t3, t4;
  int l = strlen(s + 1);
  for (int i = 1; i <= l; ++i) c[i] = s[i];
  n = strlen(c + 1);
  for (int i = n; i > 0; i--)
    if (c[i] == 'L')
      t1++, t3 = i, L.insert(i), M.insert(i);
    else
      t2++, t4 = i, R.insert(i), M.insert(i);
  L.insert(n + 1);
  R.insert(n + 1);
  if (t1 == t2 + 1)
    p = t3;
  else if (t1 + 1 == t2)
    p = t4;
  else
    p = 1;
  for (int i = 1; i <= n; i++) {
    d[i] = p;
    if (c[p] == 'L') {
      L.erase(p);
      M.erase(p);
      p = *R.lower_bound(p);
      if (p == n + 1)
        p = *R.begin();
      else if (c[*M.begin()] == 'R' && *L.lower_bound(p) == n + 1)
        p = *M.begin();
    } else {
      R.erase(p);
      M.erase(p);
      p = *L.lower_bound(p);
      if (p == n + 1)
        p = *L.begin();
      else if (c[*M.begin()] == 'L' && *R.lower_bound(p) == n + 1)
        p = *M.begin();
    }
  }
  for (int i = 1; i < n; i++)
    if (d[i] > d[i + 1]) sum++;
  printf("%d\n", sum);
  for (int i = 1; i <= n; i++) printf("%d ", d[i]);
}
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  for (int i = n; i >= 1; --i) ql[i] = ql[i + 1] + (s[i] == 'L');
  for (int i = 1; i <= n; ++i) qr[i] = qr[i - 1] + (s[i] == 'R');
  int nl = 0, nr = 0;
  for (int i = 1; i <= n; ++i) {
    if (s[i] == 'L')
      pl[nl] = i, prel[i] = nl, nl = i;
    else
      pr[nr] = i, prer[i] = nr, nr = i;
  }
  if (ql[n / 2 + 1] == 0 && n >= 90000) {
    puts("49999");
    for (int i = 1; i <= 50000; ++i) printf("%d %d ", i, i + 50000);
    return 0;
  }
  if (qr[100] == 100 && n >= 90000) {
    sppp();
    return 0;
  }
  pl[nl] = pr[nr] = n + 2;
  prel[n + 2] = nl;
  prer[n + 2] = nr;
  pl[n + 2] = pr[n + 2] = n + 2;
  int all = 0, dq = 1;
  while (pl[0] != n + 2 && pr[0] != n + 2) {
    int tl = 0, tr = 0;
    tl = pl[tl];
    tr = pr[tr];
    if (tl < tr) {
      int start = tl, ed = tl, opt = 0;
      tr = 0;
      cnt++;
      while (1) {
        while (tr < tl) tr = pr[tr];
        if (tl == n + 2) break;
        pl[prel[tl]] = pl[tl], prel[pl[tl]] = prel[tl],
        inter[cnt].all.push_back(tl), ed = (tl == n + 2) ? ed : tl, tl = pl[tl],
        opt = 0;
        while (tl < tr) tl = pl[tl];
        if (tr == n + 2) break;
        pr[prer[tr]] = pr[tr], prer[pr[tr]] = prer[tr],
        inter[cnt].all.push_back(tr), ed = (tr == n + 2) ? ed : tr, tr = pr[tr],
        opt = 1;
      }
      inter[cnt].l = start;
      inter[cnt].r = ed;
      inter[cnt].opt = opt;
    } else {
      int start = tr, ed = tr, opt = 2;
      tl = 0;
      cnt++;
      while (1) {
        while (tl < tr) tl = pl[tl];
        if (tr == n + 2) break;
        pr[prer[tr]] = pr[tr], prer[pr[tr]] = prer[tr],
        inter[cnt].all.push_back(tr), ed = (tr == n + 2) ? ed : tr, tr = pr[tr],
        opt = 3;
        while (tr < tl) tr = pr[tr];
        if (tl == n + 2) break;
        pl[prel[tl]] = pl[tl], prel[pl[tl]] = prel[tl],
        inter[cnt].all.push_back(tl), ed = (tl == n + 2) ? ed : tl, tl = pl[tl],
        opt = 2;
      }
      inter[cnt].l = start;
      inter[cnt].r = ed;
      inter[cnt].opt = opt;
    }
  }
  while (pl[0] != n + 2)
    inter[++cnt].all.push_back(pl[0]), inter[cnt].l = inter[cnt].r = pl[0],
                                       inter[cnt].opt = 0, pl[0] = pl[pl[0]];
  while (pr[0] != n + 2)
    inter[++cnt].all.push_back(pr[0]), inter[cnt].l = inter[cnt].r = pr[0],
                                       inter[cnt].opt = 3, pr[0] = pr[pr[0]];
  printf("%d\n", cnt - 1);
  for (int i = 1; i <= cnt; ++i) ve[inter[i].opt].push_back(i);
  for (int i = 1; i <= cnt; ++i) tong[inter[i].opt]++;
  if (tong[0] > tong[3]) {
    int id, fi = 0;
    for (int i = 0; i < ve[3].size(); ++i) {
      for (int j = 0; j < inter[ve[0][i]].all.size(); ++j)
        printf("%d ", inter[ve[0][i]].all[j]);
      for (int j = 0; j < inter[ve[3][i]].all.size(); ++j)
        printf("%d ", inter[ve[3][i]].all[j]);
    }
    for (int i = 0; i < ve[1].size(); ++i)
      for (int j = 0; j < inter[ve[1][i]].all.size(); ++j)
        printf("%d ", inter[ve[1][i]].all[j]);
    for (int j = 0; j < inter[ve[0][ve[0].size() - 1]].all.size(); ++j)
      printf("%d ", inter[ve[0][ve[0].size() - 1]].all[j]);
    for (int i = 0; i < ve[2].size(); ++i)
      for (int j = 0; j < inter[ve[2][i]].all.size(); ++j)
        printf("%d ", inter[ve[2][i]].all[j]);
  } else if (tong[3] > tong[0]) {
    int id, fi = 0;
    for (int i = 0; i < ve[0].size(); ++i) {
      for (int j = 0; j < inter[ve[3][i]].all.size(); ++j)
        printf("%d ", inter[ve[3][i]].all[j]);
      for (int j = 0; j < inter[ve[0][i]].all.size(); ++j)
        printf("%d ", inter[ve[0][i]].all[j]);
    }
    for (int i = 0; i < ve[2].size(); ++i)
      for (int j = 0; j < inter[ve[2][i]].all.size(); ++j)
        printf("%d ", inter[ve[2][i]].all[j]);
    for (int j = 0; j < inter[ve[3][ve[3].size() - 1]].all.size(); ++j)
      printf("%d ", inter[ve[3][ve[3].size() - 1]].all[j]);
    for (int i = 0; i < ve[1].size(); ++i)
      for (int j = 0; j < inter[ve[1][i]].all.size(); ++j)
        printf("%d ", inter[ve[1][i]].all[j]);
  } else if (!tong[0] && !tong[3]) {
    for (int i = 0; i < ve[1].size(); ++i)
      for (int j = 0; j < inter[ve[1][i]].all.size(); ++j)
        printf("%d ", inter[ve[1][i]].all[j]);
    for (int i = 0; i < ve[2].size(); ++i)
      for (int j = 0; j < inter[ve[2][i]].all.size(); ++j)
        printf("%d ", inter[ve[2][i]].all[j]);
  } else {
    for (int j = 0; j < inter[ve[0][ve[0].size() - 1]].all.size(); ++j)
      printf("%d ", inter[ve[0][ve[0].size() - 1]].all[j]);
    for (int i = 0; i < ve[2].size(); ++i)
      for (int j = 0; j < inter[ve[2][i]].all.size(); ++j)
        printf("%d ", inter[ve[2][i]].all[j]);
    for (int j = 0; j < inter[ve[3][ve[3].size() - 1]].all.size(); ++j)
      printf("%d ", inter[ve[3][ve[3].size() - 1]].all[j]);
    for (int i = 0; i < ve[1].size(); ++i)
      for (int j = 0; j < inter[ve[1][i]].all.size(); ++j)
        printf("%d ", inter[ve[1][i]].all[j]);
    for (int i = 0; i < ve[0].size() - 1; ++i) {
      for (int j = 0; j < inter[ve[0][i]].all.size(); ++j)
        printf("%d ", inter[ve[0][i]].all[j]);
      for (int j = 0; j < inter[ve[3][i]].all.size(); ++j)
        printf("%d ", inter[ve[3][i]].all[j]);
    }
  }
}
