func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MOD = 1e9 + 7;   const int C = 26;   void add(int &x, int y) {     x += y;     while (x >= MOD) x -= MOD;     while (x < 0) x += MOD;   }   int fix(int x) {     while (x >= MOD) x -= MOD;     while (x < 0) x += MOD;     return x;   }   int pw(int a, int b) {     int ret = 1;     while (b) {       if (b & 1) ret = 1ll * ret * a % MOD;       b >>= 1;       a = 1ll * a * a % MOD;     }     return ret;   }   const int MAXN = 1e6 + 10;   int a[MAXN], ans[MAXN], n, K, sz;   vector<int> who[MAXN], vec[2][2];   void solve() {     string s;     cin >> s;     n = s.size();     for (int i = 0; i < n; i++) a[i] = s[i] ==  L ;     set<int> avail[2];     for (int i = 0; i < n; i++) {       if (avail[a[i] ^ 1].empty()) {         avail[a[i]].insert(K);         who[K].push_back(i);         K++;       } else {         int x = *avail[a[i] ^ 1].begin();         avail[a[i] ^ 1].erase(x);         who[x].push_back(i);         avail[a[i]].insert(x);       }     }     for (int i = 0; i < K; i++) {       vec[a[who[i][0]]][a[who[i].back()]].push_back(i);     }     int cur = vec[0][0].size() < vec[1][1].size();     int last = vec[0][0].size() > vec[1][1].size();     while ((int)max(vec[0][0].size(), vec[1][1].size()) > 1) {       int i = vec[cur][cur].back();       vec[cur][cur].pop_back();       for (int x : who[i]) ans[sz++] = x;       cur ^= 1;     }   up:     if (vec[0][0].size() && vec[1][1].size()) {       if (last) {         for (int i : vec[1][1])           for (int x : who[i]) ans[sz++] = x;         for (int i : vec[0][1])           for (int x : who[i]) ans[sz++] = x;         for (int i : vec[0][0])           for (int x : who[i]) ans[sz++] = x;         for (int i : vec[1][0])           for (int x : who[i]) ans[sz++] = x;       } else {         for (int i : vec[0][0])           for (int x : who[i]) ans[sz++] = x;         for (int i : vec[1][0])           for (int x : who[i]) ans[sz++] = x;         for (int i : vec[1][1])           for (int x : who[i]) ans[sz++] = x;         for (int i : vec[0][1])           for (int x : who[i]) ans[sz++] = x;       }     } else {       if (vec[0][0].size()) {         for (int i : vec[0][1])           for (int x : who[i]) ans[sz++] = x;         for (int i : vec[0][0])           for (int x : who[i]) ans[sz++] = x;         for (int i : vec[1][0])           for (int x : who[i]) ans[sz++] = x;       } else if (vec[1][1].size()) {         for (int i : vec[1][0])           for (int x : who[i]) ans[sz++] = x;         for (int i : vec[1][1])           for (int x : who[i]) ans[sz++] = x;         for (int i : vec[0][1])           for (int x : who[i]) ans[sz++] = x;       } else if (!!vec[0][1].size() ^ !!vec[1][0].size()) {         for (int i : vec[1][0])           for (int x : who[i]) ans[sz++] = x;         for (int i : vec[0][1])           for (int x : who[i]) ans[sz++] = x;       } else {         int i = vec[0][1].back();         vec[0][1].pop_back();         int j = vec[1][0].back();         for (int k = 1; k < (int)who[i].size(); k++) who[j].push_back(who[i][k]);         while ((int)who[i].size() > 1) who[i].pop_back();         vec[0][0].push_back(i);         goto up;       }     }     cout << K - 1 <<   n ;     for (int i = 0; i < n; i++) cout << ans[i] + 1 <<    ;     cout <<   n ;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     int te = 1;     for (int w = 1; w <= te; w++) {       solve();     }     return 0;   }   