#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
inline int pow_(long long a, int n, int p = mod) {
  int r = 1;
  while (n) {
    if (n & 1) r = r * a % p;
    n >>= 1;
    a = a * a % p;
  }
  return r;
}
inline int inv_(int a) { return pow_(a, mod - 2, mod); }
inline int add(int a, int b) {
  a += b;
  if (a >= mod) a -= mod;
  return a;
}
inline void adds(int& a, int b) {
  a += b;
  if (a >= mod) a -= mod;
}
inline int mul(int a, int b) { return a * 1ll * b % mod; }
inline void muls(int& a, int b) { a = a * 1ll * b % mod; }
inline int sub(int a, int b) {
  a -= b;
  if (a < 0) a += mod;
  return a;
}
char inp[200100];
set<int> idx[2];
int main() {
  scanf("%s", inp);
  vector<std::pair<int, int> > v0, v1;
  int n = strlen(inp);
  for (int i = 0; i < (n); ++i) {
    idx[inp[i] - '0'].insert(i);
  }
  vector<vector<int> > ans;
  while (!idx[0].empty()) {
    int id = *idx[0].begin();
    idx[0].erase(idx[0].begin());
    vector<int> v(1, id);
    while (true) {
      auto o = idx[1].lower_bound(id);
      if (o == idx[1].end()) break;
      id = *o;
      v.push_back(id);
      idx[1].erase(o);
      o = idx[0].lower_bound(id);
      if (o == idx[0].end()) {
        puts("-1");
        return 0;
      }
      id = *o;
      v.push_back(id);
      idx[0].erase(o);
    }
    ans.push_back(v);
  }
  if (!idx[1].empty()) {
    puts("-1");
    return 0;
  }
  printf("%d\n", (int)(ans.size()));
  for (const std::vector<int>& v : ans) {
    printf("%d ", (int)(v.size()));
    for (int x : v) printf("%d ", x + 1);
    putchar(10);
  }
  return 0;
}
