#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
string s;
int match[N];
bool vis[N];
set<int> idx[2];
vector<pair<int, int> > sq[4];
vector<int> cur;
void dfs(int u) {
  if (u == -1) return;
  cur.push_back(u);
  vis[u] = 1;
  dfs(match[u]);
}
int type(pair<int, int> v) {
  return (s[v.first] == 'R') + 2 * (s[v.second] == 'R');
}
void mrg(vector<pair<int, int> > &go) {
  if (!go.size()) return;
  pair<int, int> me = make_pair(-1, -1);
  for (int i = 0; i < go.size(); ++i) {
    pair<int, int> bk = go[i];
    if (me.second != -1) {
      match[me.second] = bk.first;
    }
    if (me.first == -1) me.first = bk.first;
    me.second = bk.second;
  }
  go.clear();
  go.push_back(me);
}
void merge(vector<pair<int, int> > &v1, vector<pair<int, int> > &v2) {
  pair<int, int> f1 = v1.back(), f2 = v2.back();
  v1.pop_back(), v2.pop_back();
  match[f1.second] = f2.first;
  v1.push_back(make_pair(f1.first, f2.second));
}
const int LL = 0, RL = 1, LR = 2, RR = 3;
int main() {
  memset(match, -1, sizeof match);
  cin >> s;
  for (int i = 0; i < s.size(); ++i) {
    bool ix = s[i] == 'R';
    idx[ix].insert(i);
  }
  int cnt = 0;
  for (int i = 0; i < s.size(); ++i) {
    bool ix = s[i] == 'R';
    auto it = idx[ix ^ 1].lower_bound(i);
    if (it != idx[ix ^ 1].end()) {
      match[i] = *it;
      cnt++;
      idx[ix ^ 1].erase(it);
    }
  }
  for (int i = 0; i < s.size(); ++i) {
    if (!vis[i]) {
      cur.clear();
      dfs(i);
      sq[type(make_pair(cur[0], cur.back()))].push_back(
          make_pair(cur[0], cur.back()));
    }
  }
  bool st = (sq[RR].size() > sq[LL].size());
  vector<int> fn;
  pair<int, int> last = make_pair(-1, -1);
  while (1) {
    int c = (st ? RR : LL);
    if (sq[c].size() == 0) break;
    pair<int, int> bk = sq[c].back();
    sq[c].pop_back();
    if (last.first == -1) last.first = bk.first;
    if (last.second != -1) {
      match[last.second] = bk.first;
    }
    last.second = bk.second;
    st = !st;
  }
  if (last.first != -1) {
    sq[type(last)].push_back(last);
  }
  mrg(sq[RL]);
  mrg(sq[LR]);
  if (sq[RL].size() && sq[LR].size()) {
    pair<int, int> f1 = sq[RL][0], f2 = sq[LR][0];
    if (f1.first > f2.first) swap(f1, f2);
    sq[RL].pop_back(), sq[LR].pop_back();
    int m2 = match[f1.first];
    match[f1.first] = f2.first, match[f2.second] = m2;
    sq[type(f1)].push_back(make_pair(f1.first, f1.second));
  }
  if (sq[LL].size()) {
    if (sq[LR].size())
      merge(sq[LR], sq[LL]);
    else if (sq[RL].size())
      merge(sq[LL], sq[RL]);
  } else if (sq[RR].size()) {
    if (sq[RL].size()) {
      merge(sq[RL], sq[RR]);
    } else if (sq[LR].size())
      merge(sq[RR], sq[LR]);
  }
  memset(vis, 0, sizeof vis);
  cur.clear();
  for (int i = 0; i < 4; ++i) {
    if (sq[i].size()) {
      dfs(sq[i][0].first);
      break;
    }
  }
  assert(cur.size() == s.size());
  printf("%d\n", (int)s.size() - cnt - 1);
  for (int i = 0; i < cur.size(); ++i) {
    if (i) printf(" ");
    printf("%d", cur[i] + 1);
  }
  puts("");
  return 0;
}
