func_code_string: #include <bits/stdc++.h>   using namespace std;   unsigned long long mod = 1e9 + 7;   unsigned long long ncr(long long int n, long long int k) {     unsigned long long res = 1;     if (k > n - k) k = n - k;     for (int i = 0; i < k; ++i) {       res *= (n - i);       res /= (i + 1);       res = res;     }     return res;   }   bool prime(unsigned long long num) {     bool flag = true;     for (unsigned long long i = 2; i * i <= num; i++) {       if (num % i == 0) {         flag = false;         break;       }     }     return flag;   }   long long ipow(long long base, long long exp) {     long long result = 1;     for (;;) {       if (exp & 1) {         result *= base;         result = result % mod;       }       exp >>= 1;       if (!exp) break;       base *= base;       base = base % mod;     }     return result % mod;   }   long long abs(long long a, long long b) {     if ((a - b) > 0)       return (a - b);     else       return (b - a);   }   long long MOD = 998244353;   long long add(long long a, long long b) {     a += b;     if (a >= mod) a -= mod;     if (a < 0) a += mod;     return a;   }   long long gcd(long long a, long long b) {     if (b == 0) return a;     return gcd(b, a % b);   }   long long der(int k) {     long long res = 0;     long long fact = 1;     for (int i = 2; i <= k; i++) fact *= i;     int s = 1;     long long j = 1;     for (int i = 2; i <= k; i++) {       j = j * i;       long long first = (fact / j) * s;       res += first;       s = s * -1;     }     return res;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     string s;     cin >> s;     set<int> one, z;     int len = s.length();     for (int i = 0; i < len; i++) {       if (s[i] ==  0 )         z.insert(i + 1);       else         one.insert(i + 1);     }     vector<vector<int>> subs;     vector<int> sub;     while (true) {       if (z.empty()) break;       auto it = z.begin();       sub.push_back(*it);       int val = *it;       z.erase(it);       while (!z.empty()) {         auto it1 = one.lower_bound(val);         if (it1 == one.end()) break;         it = z.lower_bound(*it1);         if (it == z.end()) break;         int val1 = *it1;         val = *it;         sub.push_back(val1);         one.erase(it1);         sub.push_back(val);         z.erase(it);       }       subs.push_back(sub);       sub.clear();     }     if (!one.empty()) {       cout <<  -1 ;       return 0;     } else {       cout << subs.size() << endl;       for (int i = 0; i < subs.size(); i++) {         cout << subs[i].size() <<    ;         for (int j = 0; j < subs[i].size(); j++) {           cout << subs[i][j] <<    ;         }         cout << endl;       }     }   }   