#include <bits/stdc++.h>
int main() {
  using namespace std;
  string s;
  cin >> s;
  string s2(s);
  for (char &c : s2) c = '0';
  map<int, int> l, r;
  vector<int> l2, r2;
  for (int i = 0, j = 0; i < s.size(); i++) {
    if (s[i] != '1') {
      l2.push_back(i);
    } else if (s[i] == '1') {
      if (j == l2.size()) {
        cout << "-1";
        return 0;
      }
      l[i] = l2[j];
      s[l2[j++]] = '2';
    }
  }
  for (int i = s.size() - 1, j = 0; i >= 0; i--) {
    if (s[i] != '1') {
      r2.push_back(i);
    } else {
      if (j == r2.size()) {
        cout << "-1";
        return 0;
      }
      r[i] = r2[j];
      s[r2[j++]] = '2';
    }
  }
  int cn = 0;
  for (int i = 0; i < s.size(); i++)
    if (s[i] == '0') ++cn;
  auto i1 = l.begin(), i2 = r.begin();
  map<int, vector<int>> m;
  for (; i1 != l.end() && i2 != r.end(); i1++, i2++) {
    m[i1->second + 1] = {i1->second + 1, (i1->first + 1), (i2->second + 1)};
  }
  vector<vector<int>> ans;
  while (!m.empty()) {
    int c = m.begin()->first;
    vector<int> vv;
    while (m.find(c) != m.end()) {
      if (vv.empty() || vv.back() != m[c][0]) vv.push_back(m[c][0]);
      vv.push_back(m[c][1]);
      vv.push_back(m[c][2]);
      int c2 = c;
      c = m[c][2];
      m.erase(c2);
    }
    ans.push_back(vv);
  }
  cout << ans.size() + cn << endl;
  for (auto vv : ans) {
    cout << vv.size() << " ";
    for (int x : vv) cout << x << " ";
    cout << endl;
  }
  for (int i = 0; i < s.size(); i++)
    if (s[i] == '0') cout << "1 " << i + 1 << endl;
}
