#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const long long mod = 1e9 + 7;
const double PI = acos(-1.0);
const double eps = 1e-10;
const int N = 2e5 + 5;
char s[N];
set<int> zero, one;
set<int>::iterator iz, io;
int _next[N], res[N], len;
bool e[N], start[N];
int main() {
  memset(start, false, sizeof start);
  memset(e, false, sizeof e);
  scanf(" %s", s + 1);
  for (int i = 1; s[i]; i++) {
    if (s[i] == '0')
      zero.insert(i);
    else if (s[i] == '1')
      one.insert(i);
  }
  while (!zero.empty()) {
    int b = *zero.begin();
    start[b] = true;
    zero.erase(zero.begin());
    while (true) {
      io = one.upper_bound(b);
      if (io == one.end()) break;
      iz = zero.upper_bound(*io);
      if (iz == zero.end()) break;
      _next[b] = *io, _next[*io] = *iz;
      b = *iz;
      one.erase(io), zero.erase(iz);
    }
    e[b] = true;
  }
  if (!one.empty()) {
    puts("-1");
    return 0;
  }
  len = 0;
  for (int i = 1; s[i]; i++) {
    if (start[i]) {
      res[len] = 0;
      for (int j = i;; j = _next[j]) {
        res[len]++;
        if (e[j]) break;
      }
      len++;
    }
  }
  int t = 0;
  printf("%d\n", len);
  for (int i = 1; s[i]; i++) {
    if (start[i]) {
      printf("%d", res[t++]);
      for (int j = i;; j = _next[j]) {
        printf(" %d", j);
        if (e[j]) break;
      }
      puts("");
    }
  }
  return 0;
}
