#include <bits/stdc++.h>
const int inf = 0x7f7f7f7f;
inline void gettime() { ; }
inline int read() {
  static char c;
  static int x;
  int flag = 1;
  while (c = getchar(), !isdigit(c))
    if (c == '-') flag = -1;
  x = c - '0';
  while (c = getchar(), isdigit(c)) x = (x << 1) + (x << 3) + c - '0';
  return x * flag;
}
inline char achar() {
  static char c;
  while (c = getchar(), !isdigit(c))
    ;
  return c;
}
int n, ones;
char s[200200];
std::queue<int> ns[200200];
std::queue<int> ps[2];
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  for (int i = 1; i <= n; ++i) ones += s[i] == '1';
  int k = (n - ones) - ones;
  if (k <= 0) return puts("-1"), 0;
  for (int i = 1; i <= k; ++i) ps[0].push(i);
  for (int i = 1; i <= n; ++i) {
    int cur = s[i] == '1';
    if (ps[cur].empty()) return puts("-1"), 0;
    ns[ps[cur].front()].push(i);
    ps[cur ^ 1].push(ps[cur].front());
    ps[cur].pop();
  }
  if (!ps[0].empty()) return puts("-1"), 0;
  printf("%d\n", k);
  for (int i = 1; i <= k; ++i) {
    printf("%d ", ns[i].size());
    for (; !ns[i].empty(); ns[i].pop()) printf("%d ", ns[i].front());
    printf("\n");
  }
}
