#include <bits/stdc++.h>
using namespace std;
template <typename T>
void getFoo(T &x) {
  x = 0;
  register char c = getchar_unlocked();
  for (; c < 48 || c > 57; c = getchar_unlocked())
    ;
  for (; c > 47 && c < 58; c = getchar_unlocked())
    x = (x << 1) + (x << 3) + c - 48;
}
template <typename T1, typename T2>
void getFoo(T1 &x, T2 &y) {
  getFoo(x);
  getFoo(y);
}
template <typename T1, typename T2, typename T3>
void getFoo(T1 &x, T2 &y, T3 &z) {
  getFoo(x);
  getFoo(y);
  getFoo(z);
}
vector<vector<int> > ans;
queue<int> end0, end1;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  string str;
  cin >> str;
  int len = str.length();
  for (int i = 0; i < (len); ++i) {
    if (str[i] == 48) {
      if (end1.empty()) {
        end0.push(ans.size());
        ans.push_back(vector<int>{i});
      } else {
        ans[end1.front()].push_back(i);
        end0.push(end1.front());
        end1.pop();
      }
    } else {
      if (end0.empty()) {
        cout << -1 << '\n';
        return 0;
      } else {
        ans[end0.front()].push_back(i);
        end1.push(end0.front());
        end0.pop();
      }
    }
  }
  if (end1.empty()) {
    cout << ans.size() << '\n';
    for (auto v : ans) {
      cout << v.size() << " ";
      for (auto x : v) cout << x + 1 << " ";
      cout << '\n';
    }
  } else
    cout << -1 << '\n';
  return 0;
}
