#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f, oo = inf;
inline long long read() {
  register long long x = 0, f = 1;
  register char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') f = -1;
  for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
  return x * f;
}
void write(long long x) {
  if (x < 0) x = -x, putchar('-');
  if (x >= 10) write(x / 10);
  putchar(x % 10 + '0');
}
void writeln(long long x) {
  write(x);
  puts("");
}
const long long N = 1e6 + 233;
long long n, m, a[N], b[N];
char s[N];
long long z[N], f[N], WZP[N], Orz[N], num2, num1, d, l, flag[N], sum;
void dfs(long long x) {
  z[++d] = x;
  if (f[x]) dfs(f[x]);
}
signed main() {
  scanf("%s", s + 1);
  l = strlen(s + 1);
  for (long long i = 1; i <= l; i++)
    if (s[i] == '0') {
      if (!num2)
        flag[i] = 1, sum++;
      else
        f[WZP[num2]] = i, num2--;
      Orz[++num1] = i;
    } else {
      if (!num1) {
        puts("-1");
        return 0;
      } else
        f[Orz[num1--]] = i;
      WZP[++num2] = i;
    }
  if (num2) {
    puts("-1");
    return 0;
  }
  writeln(sum);
  for (long long i = 1; i <= l; i++)
    if (flag[i]) {
      d = 0;
      dfs(i);
      write(d);
      for (long long j = 1; j <= d; j++) putchar(' '), write(z[j]);
      puts("");
    }
}
