#include <bits/stdc++.h>
namespace fast_IO {
const int IN_LEN = 10000000, OUT_LEN = 10000000;
char ibuf[IN_LEN], obuf[OUT_LEN], *ih = ibuf + IN_LEN, *oh = obuf,
                                  *lastin = ibuf + IN_LEN,
                                  *lastout = obuf + OUT_LEN - 1;
inline char getchar_() {
  return (ih == lastin) &&
                 (lastin = (ih = ibuf) + fread(ibuf, 1, IN_LEN, stdin),
                  ih == lastin)
             ? EOF
             : *ih++;
}
inline void putchar_(const char x) {
  if (oh == lastout) fwrite(obuf, 1, oh - obuf, stdout), oh = obuf;
  *oh++ = x;
}
inline void flush() { fwrite(obuf, 1, oh - obuf, stdout); }
}  // namespace fast_IO
using namespace fast_IO;
template <typename T>
inline T max(const T a, const T b) {
  return a > b ? a : b;
}
template <typename T>
inline T min(const T a, const T b) {
  return a < b ? a : b;
}
template <typename T>
inline T abs(const T a) {
  return a > 0 ? a : -a;
}
template <typename T>
inline void swap(T& a, T& b) {
  T c = a;
  a = b;
  b = c;
}
template <typename T>
inline T gcd(const T a, const T b) {
  if (a % b == 0) return b;
  return gcd(b, a % b);
}
template <typename T>
inline T square(const T x) {
  return x * x;
};
template <typename T>
inline void read(T& x) {
  char cu = getchar();
  x = 0;
  bool fla = 0;
  while (!isdigit(cu)) {
    if (cu == '-') fla = 1;
    cu = getchar();
  }
  while (isdigit(cu)) x = x * 10 + cu - '0', cu = getchar();
  if (fla) x = -x;
}
template <typename T>
void printe(const T x) {
  if (x >= 10) printe(x / 10);
  putchar(x % 10 + '0');
}
template <typename T>
inline void print(const T x) {
  if (x < 0)
    putchar('-'), printe(-x);
  else
    printe(x);
}
char s[200001];
int len, fr[200001];
int stack0[200001], top0, stack1[200001], top1, tot;
inline void out(const int x) {
  tot++;
  if (fr[x]) {
    out(fr[x]);
    putchar(' ');
    print(x);
  } else {
    print(tot);
    putchar(' ');
    print(x);
  }
}
int main() {
  scanf("%s", s + 1), len = strlen(s + 1);
  for (register int i = 1; i <= len; i++)
    if (s[i] == '0') {
      if (top1) fr[i] = stack1[top1--];
      stack0[++top0] = i;
    } else {
      if (!top0) {
        print(-1);
        return flush(), 0;
      }
      fr[i] = stack0[top0--];
      stack1[++top1] = i;
    }
  if (top1)
    print(-1);
  else {
    print(top0), putchar('\n');
    for (register int i = 1; i <= top0; i++)
      tot = 0, out(stack0[i]), putchar('\n');
  }
  return flush(), 0;
}
