#include <bits/stdc++.h>
using namespace std;
const int M = 5e6 + 5;
const long long int mod = 1e9 + 7;
const long long int inf = 9e18;
const double pi = 3.14159265358979323846;
long long int t, n, m, x, sum, k, p, u = 0;
string s, z, ans = "";
long long int P[10000005] = {0};
void sieve() {
  for (long long int i = 2; i < (10000005); i++)
    if (!P[i])
      for (long long int j = i * i; j < (10000005); j += i) P[j] = i;
}
long long int raised(long long int x, long long int v) {
  if (v == 0) return 1 % mod;
  if (v % 2 == 1) return (x * raised(x, v - 1)) % mod;
  long long int r = raised(x, v / 2);
  return (r * r) % mod;
}
bool prime(long long int n) {
  if (n == 1) return 1;
  for (int i = 2; i <= sqrt(n); i++)
    if (n % i == 0) return 0;
  return 1;
}
long long int hcf(long long int a, long long int b) {
  if (a % b == 0) return b;
  return hcf(b, a % b);
}
bool comp(long long int a, long long int b) { return (a < b); }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  cin >> s;
  n = (long long int)((s).size());
  bool f = 0;
  long long int l = 0, h = 0, c = 0, d = 0;
  vector<vector<long long int> > v;
  vector<long long int> a[2];
  for (long long int i = 0; i < n; i++) {
    if (s[i] == '1') {
      if (a[0].size()) {
        long long int p = a[0][(long long int)((a[0]).size()) - 1];
        a[0].pop_back();
        v[p].push_back(i);
        a[1].push_back(p);
      } else {
        f = 1;
        break;
      }
    } else {
      if (a[1].size()) {
        long long int p = a[1][(long long int)((a[1]).size()) - 1];
        a[1].pop_back();
        v[p].push_back(i);
        a[0].push_back(p);
      } else {
        a[0].push_back((long long int)((v).size()));
        vector<long long int> zero;
        zero.push_back(i);
        v.push_back(zero);
      }
    }
  }
  for (long long int i = 0; i < (long long int)((v).size()); i++)
    if (s[v[i][(long long int)((v[i]).size()) - 1]] == '1') f = 1;
  if (f)
    cout << "-1";
  else {
    cout << (long long int)((v).size()) << "\n";
    for (long long int i = 0; i < (long long int)((v).size()); i++) {
      cout << (long long int)((v[i]).size()) << " ";
      for (long long int j = 0; j < (long long int)((v[i]).size()); j++)
        cout << v[i][j] + 1 << " ";
      cout << "\n";
    }
  }
}
