#include <bits/stdc++.h>
using namespace std;
const long double pi = 3.1415926535897932384626433832795l;
template <typename T>
inline auto sqr(T x) -> decltype(x * x) {
  return x * x;
}
template <typename T1, typename T2>
inline bool umx(T1 &a, T2 b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename T1, typename T2>
inline bool umn(T1 &a, T2 b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
const int N = 100000;
struct Input {
  string s;
  bool read() { return getline(cin, s) && ((int)(s).size()); }
  void init(const Input &input) { *this = input; }
};
struct Data : Input {
  vector<int> ans;
  void write() {
    int res = 0;
    for (int i = int(0); i < int(((int)(ans).size()) - 1); ++i) {
      res += ans[i + 1] < ans[i];
    }
    cout << res << endl;
    for (int i = int(0); i < int(((int)(ans).size())); ++i) {
      if (i) {
        printf(" ");
      }
      printf("%d", ans[i] + 1);
    }
    puts("");
  }
  virtual void solve() {}
  virtual void clear() { *this = Data(); }
};
struct Solution : Data {
  int n;
  int t[N];
  deque<pair<int, int> > a[2][2];
  int go[N];
  void solve() {
    n = ((int)(s).size());
    memset(go, -1, sizeof go);
    for (int i = int(0); i < int(n); ++i) {
      t[i] = (s[i] == 'L');
    }
    for (int i = int(0); i < int(n); ++i) {
      bool ok = 0;
      for (int q = int(0); q < int(2); ++q) {
        if (((int)(a[q][!t[i]]).size())) {
          go[a[q][!t[i]].back().second] = i;
          a[q][t[i]].push_back(make_pair(a[q][!t[i]].back().first, i));
          a[q][!t[i]].pop_back();
          ok = 1;
          break;
        }
      }
      if (!ok) {
        a[t[i]][t[i]].push_back(make_pair(i, i));
      }
    }
    while (((int)(a[0][0]).size()) + ((int)(a[0][1]).size()) +
               ((int)(a[1][0]).size()) + ((int)(a[1][1]).size()) >
           1) {
      ;
      ;
      bool ok = 0;
      for (int x = int(0); x < int(2); ++x) {
        for (int y = int(0); y < int(2); ++y) {
          for (int z = int(0); z < int(2); ++z) {
            if (((int)(a[x][y]).size()) && ((int)(a[!y][z]).size()) &&
                (make_pair(x, y) != pair<int, int>(!y, z) ||
                 ((int)(a[x][y]).size()) >= 2)) {
              go[a[x][y].front().second] = a[!y][z].back().first;
              int st = a[x][y].front().first;
              int fn = a[!y][z].back().second;
              a[x][y].pop_front();
              a[!y][z].pop_back();
              a[x][z].push_back(make_pair(st, fn));
              ok = 1;
            }
          }
        }
      }
      if (ok) {
        ;
        continue;
      };
      deque<pair<int, int> > &p = a[0][1];
      deque<pair<int, int> > &q = a[1][0];
      int x = p.back().first, y = p.back().second;
      int z = q.back().first, w = q.back().second;
      p.pop_back();
      q.pop_back();
      if (x > z) {
        swap(x, z);
        swap(y, w);
      }
      int f = go[x];
      go[x] = z;
      a[t[x]][t[w]].push_back(make_pair(x, w));
      a[t[f]][t[y]].push_back(make_pair(f, y));
      ;
    };
    ;
    ;
    ;
    int st = -1;
    for (int x = int(0); x < int(2); ++x) {
      for (int y = int(0); y < int(2); ++y) {
        if (((int)(a[x][y]).size())) {
          st = a[x][y].back().first;
        }
      }
    }
    while (st != -1) {
      ;
      ans.push_back(st);
      st = go[st];
    }
  }
  void clear() { *this = Solution(); }
};
Solution sol;
int main() {
  cout.setf(ios::showpoint | ios::fixed);
  cout.precision(20);
  sol.read();
  sol.solve();
  sol.write();
  return 0;
}
