func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 200010;   char s[N];   vector<int> v[N];   set<int> s1, s2;   set<int>::iterator j;   inline int gi() {     int x = 0, o = 1;     char ch = getchar();     while (ch !=  -  && (ch <  0  || ch >  9 )) ch = getchar();     if (ch ==  - ) o = -1, ch = getchar();     while (ch >=  0  && ch <=  9 ) x = x * 10 + ch -  0 , ch = getchar();     return x * o;   }   int main() {     scanf( %s , s + 1);     int n = strlen(s + 1), sum = 0, k = 0;     for (int i = 1; i <= n; i++) {       sum += s[i] -  0 ;       if (sum + sum > i) return puts( -1 ), 0;       if (s[i] ==  1 )         s1.insert(i);       else         s2.insert(i);     }     sum = 0;     for (int i = n; i; i--) {       sum += s[i] -  0 ;       if (sum + sum > n - i + 1) return puts( -1 ), 0;     }     while (!s1.empty()) {       int now = 0;       bool flg = 0;       ++k;       while (now <= n) {         if (!flg) {           j = s2.lower_bound(now);           if (j == s2.end()) break;           now = (*j) + 1;           v[k].push_back(*j);         } else {           j = s1.lower_bound(now);           if (j == s1.end()) break;           now = (*j) + 1;           v[k].push_back(*j);         }         flg ^= 1;       }       for (int i = 0; i < v[k].size(); i++) {         if (s[v[k][i]] ==  0 )           s2.erase(v[k][i]);         else           s1.erase(v[k][i]);       }     }     for (j = s2.begin(); j != s2.end(); j++) v[++k].push_back(*j);     cout << k << endl;     for (int i = 1; i <= k; i++) {       printf( %d  , (int)v[i].size());       for (int j = 0; j < v[i].size(); j++) printf( %d  , v[i][j]);       puts(  );     }     return 0;   }   