#include <bits/stdc++.h>
using namespace std;
const int RLEN = 1 << 20 | 1;
inline char gc() {
  static char ibuf[RLEN], *ib, *ob;
  (ib == ob) && (ob = (ib = ibuf) + fread(ibuf, 1, RLEN, stdin));
  return (ib == ob) ? EOF : *ib++;
}
inline int read() {
  char ch = getchar();
  int res = 0;
  bool f = 1;
  while (!isdigit(ch)) f ^= ch == '-', ch = getchar();
  while (isdigit(ch)) res = (res + (res << 2) << 1) + (ch ^ 48), ch = getchar();
  return f ? res : -res;
}
inline long long readll() {
  char ch = getchar();
  long long res = 0;
  bool f = 1;
  while (!isdigit(ch)) f ^= ch == '-', ch = getchar();
  while (isdigit(ch)) res = (res + (res << 2) << 1) + (ch ^ 48), ch = getchar();
  return f ? res : -res;
}
inline int readstring(char *s) {
  int top = 0;
  char ch = getchar();
  while (isspace(ch)) ch = getchar();
  while (!isspace(ch) && ch != EOF) s[++top] = ch, ch = getchar();
  s[top + 1] = '\0';
  return top;
}
template <typename tp>
inline void chemx(tp &a, tp b) {
  a = max(a, b);
}
template <typename tp>
inline void chemn(tp &a, tp b) {
  a = min(a, b);
}
const int N = 100005;
queue<int> q[2];
vector<pair<int, int> > vec;
int vis[N], n, kd[N], pre[N], nxt[N];
char str[N];
inline void link(int u, int v) { nxt[u] = v, pre[v] = u; }
inline bool check() {
  if (vec.size() < 2) return 0;
  int st1 = vec.back().first, des1 = vec.back().second,
      st2 = vec[vec.size() - 2].first, des2 = vec[vec.size() - 2].second;
  if (kd[st2] != kd[des1]) {
    link(des1, st2), vec.pop_back(), vec.pop_back();
    vec.push_back(pair<int, int>(st1, des2));
    return 1;
  }
  if (kd[st1] != kd[des2]) {
    link(des2, st1), vec.pop_back(), vec.pop_back();
    vec.push_back(pair<int, int>(st2, des1));
    return 1;
  }
  if (kd[st1] != kd[des1]) {
    if (des1 > des2) swap(des1, des2), swap(st1, st2);
    int p = pre[des2];
    link(des1, des2), link(des2, st2), nxt[p] = 0;
    vec.pop_back(), vec.pop_back(), vec.push_back(pair<int, int>(st1, p));
    return 1;
  }
  return 0;
}
int main() {
  n = readstring(str);
  for (int i = 1; i <= n; i++)
    if (str[i] == 'L')
      kd[i] = 0;
    else
      kd[i] = 1;
  for (int i = 1; i <= n; i++) {
    if (q[kd[i] ^ 1].size()) {
      link(q[kd[i] ^ 1].front(), i), vis[i] = 1;
      q[kd[i] ^ 1].pop();
    }
    q[kd[i]].push(i);
  }
  int res = 0;
  for (int i = 1; i <= n; i++)
    if (!vis[i]) {
      res++;
      int ps = i;
      while (nxt[ps]) ps = nxt[ps];
      vec.push_back(pair<int, int>(i, ps));
      while (check())
        ;
    }
  cout << res - 1 << '\n';
  for (int i = 0; i < vec.size(); i++) {
    int j = vec[i].first;
    while (j) {
      cout << j << " ";
      j = nxt[j];
    }
  }
  return 0;
}
