#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const int maxn = 201000;
queue<int> Q;
vector<int> ans[maxn];
int n, now, flag;
int a[maxn], tmp[maxn], tot;
inline long long getint() {
  long long ret = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') ret = ret * 10 + c - '0', c = getchar();
  return ret * f;
}
int main() {
  for (;;) {
    char c = getchar();
    if (c == '\n') break;
    a[++n] = c - '0';
  }
  now = 1;
  for (int i = 1; i <= n; i++) {
    now = max(now, i + 1);
    if (a[i] == 0 || a[i] < 0) Q.push(i);
    if (a[i] == 1) {
      while (now <= n && a[now] != 0) now++;
      if (now > n || Q.empty()) {
        printf("-1");
        return 0;
      }
      if (a[Q.front()] == 0) {
        tot++;
        ans[Q.front()].push_back(Q.front());
        ans[Q.front()].push_back(i);
        ans[Q.front()].push_back(now);
        a[now++] = -Q.front();
        Q.pop();
      } else {
        ans[-a[Q.front()]].push_back(i);
        ans[-a[Q.front()]].push_back(now);
        a[now++] = a[Q.front()];
        Q.pop();
      }
    }
  }
  while (!Q.empty()) {
    if (a[Q.front()] == 0) tmp[++tot] = Q.front();
    Q.pop();
  }
  printf("%d\n", tot);
  for (int i = 1; i <= tot; i++)
    if (tmp[i]) printf("1 %d\n", tmp[i]);
  for (int i = 1; i <= n; i++) {
    if (ans[i].size()) {
      printf("%d ", ans[i].size());
      for (int j = 0; j < ans[i].size(); j++) printf("%d ", ans[i][j]);
      putchar('\n');
    }
  }
  return 0;
}
