#include <bits/stdc++.h>
using namespace std;
const int N = 100010, INF = 0x3f3f3f3f;
char S[N];
int n, totn;
int ch[N << 1][2], sumL[N << 1], sumR[N << 1];
void update(int x) {
  sumL[x] = sumL[ch[x][0]] + sumL[ch[x][1]];
  sumR[x] = sumR[ch[x][0]] + sumR[ch[x][1]];
}
int build(int l, int r) {
  int x = ++totn;
  if (l == r) {
    if (S[l] == 'L')
      sumL[x] = 1;
    else
      sumL[x] = 0;
    sumR[x] = sumL[x] ^ 1;
    return x;
  }
  int mid = (l + r) >> 1;
  ch[x][0] = build(l, mid);
  ch[x][1] = build(mid + 1, r);
  update(x);
  return x;
}
int qfirstL(int x, int l, int r) {
  if (!sumL[x]) return INF;
  if (l == r) return l;
  int mid = (l + r) >> 1;
  if (sumL[ch[x][0]])
    return qfirstL(ch[x][0], l, mid);
  else
    return qfirstL(ch[x][1], mid + 1, r);
}
int qfirstR(int x, int l, int r) {
  if (!sumR[x]) return INF;
  if (l == r) return l;
  int mid = (l + r) >> 1;
  if (sumR[ch[x][0]])
    return qfirstR(ch[x][0], l, mid);
  else
    return qfirstR(ch[x][1], mid + 1, r);
}
int swi;
int comq(int x, int l, int r, int ql, int qr) {
  if (ql <= l && r <= qr) return swi ? qfirstR(x, l, r) : qfirstL(x, l, r);
  int mid = (l + r) >> 1, ans = INF;
  if (ql <= mid) ans = min(ans, comq(ch[x][0], l, mid, ql, qr));
  if (mid < qr) ans = min(ans, comq(ch[x][1], mid + 1, r, ql, qr));
  return ans;
}
void del(int x, int l, int r, int qx) {
  if (l == r) {
    sumL[x] = sumR[x] = 0;
    return;
  }
  int mid = (l + r) >> 1;
  if (qx <= mid)
    del(ch[x][0], l, mid, qx);
  else
    del(ch[x][1], mid + 1, r, qx);
  update(x);
}
vector<int> tmpc;
vector<vector<int> > LLr, RRr, LRr, RLr;
int ans;
int main() {
  scanf("%s", S);
  if (n == 1) {
    cout << 1 << endl << 1 << endl;
    return 0;
  }
  n = strlen(S);
  ans = 0;
  build(0, n - 1);
  int nt, dr;
  while (sumL[1] || sumR[1]) {
    swi = 0;
    int tL = comq(1, 0, n - 1, 0, n - 1);
    swi = 1;
    int tR = comq(1, 0, n - 1, 0, n - 1);
    if (tL < tR)
      swi = dr = 0;
    else
      swi = dr = 1;
    nt = 0;
    tmpc.clear();
    while (1) {
      nt = comq(1, 0, n - 1, nt, n - 1);
      if (nt == INF) break;
      del(1, 0, n - 1, nt);
      tmpc.push_back(nt);
      swi ^= 1;
    }
    swi ^= 1;
    if (swi == 0 && dr == 0)
      LLr.push_back(tmpc);
    else if (swi == 1 && dr == 0)
      LRr.push_back(tmpc);
    else if (swi == 0 && dr == 1)
      RLr.push_back(tmpc);
    else
      RRr.push_back(tmpc);
    ans++;
  }
  cout << ans - 1 << endl;
  if (n % 2 == 0) {
    if (LLr.size() == 0 && !(LRr.empty() || RLr.empty())) assert(0);
    for (int i = 0; i < LLr.size(); i++) {
      if (i == 0)
        for (auto vt : LRr)
          for (auto x : vt) printf("%d ", x + 1);
      for (auto x : LLr[i]) printf("%d ", x + 1);
      if (i == 0)
        for (auto vt : RLr)
          for (auto x : vt) printf("%d ", x + 1);
      for (auto x : RRr[i]) printf("%d ", x + 1);
    }
    if (LLr.size() == 0) {
      for (auto vt : LRr)
        for (auto x : vt) printf("%d ", x + 1);
      for (auto vt : RLr)
        for (auto x : vt) printf("%d ", x + 1);
    }
  } else {
    if (LLr.size() < RRr.size()) {
      for (auto vt : RLr)
        for (auto x : vt) printf("%d ", x + 1);
      for (int i = 0; i < LLr.size(); i++) {
        for (auto x : RRr[i]) printf("%d ", x + 1);
        for (auto x : LLr[i]) printf("%d ", x + 1);
      }
      for (auto x : RRr[RRr.size() - 1]) printf("%d ", x + 1);
      for (auto vt : LRr)
        for (auto x : vt) printf("%d ", x + 1);
    } else {
      for (auto vt : LRr)
        for (auto x : vt) printf("%d ", x + 1);
      for (int i = 0; i < RRr.size(); i++) {
        for (auto x : LLr[i]) printf("%d ", x + 1);
        for (auto x : RRr[i]) printf("%d ", x + 1);
      }
      for (auto x : LLr[LLr.size() - 1]) printf("%d ", x + 1);
      for (auto vt : RLr)
        for (auto x : vt) printf("%d ", x + 1);
    }
  }
  printf("\n");
  return 0;
}
