#include <bits/stdc++.h>
using namespace std;
void end() {
  cout << "-1\n";
  exit(0);
}
void end(int n) {
  cout << "error " << n << endl;
  exit(0);
}
int main() {
  int n;
  int good = 0;
  string input_str;
  cin >> input_str;
  n = input_str.size();
  char *c = new char[n];
  for (int i = 0; i < n; i++) {
    c[i] = input_str[i] == '1';
    if (c[i]) good++;
  }
  if ((c[0] | c[n - 1]) | (good >= (n - good))) end();
  int un = n, san = 0;
  char lc;
  vector<vector<int> > subarrs;
  bool foundsa;
  stack<int> oi, zi;
  for (int i = 0; i < n; i++) {
    foundsa = false;
    if (c[i]) {
      if (zi.empty()) end();
      subarrs[zi.top()].push_back(i);
      oi.push(zi.top());
      zi.pop();
    } else {
      if (oi.empty()) {
        subarrs.push_back(vector<int>());
        subarrs.back().push_back(i);
        zi.push(subarrs.size() - 1);
        continue;
      } else {
        subarrs[oi.top()].push_back(i);
        zi.push(oi.top());
        oi.pop();
      }
    }
  }
  for (int i = 0; i < subarrs.size(); i++) {
    if (c[subarrs[i].back()]) end();
  }
  cout << subarrs.size() << endl;
  for (int i = 0; i < subarrs.size(); i++) {
    cout << subarrs[i].size() << ' ';
    for (int j = 0; j < subarrs[i].size(); j++)
      cout << subarrs[i][j] + 1 << ' ';
    cout << endl;
  }
  delete[] c;
}
