#include <bits/stdc++.h>
using namespace std;
template <class c>
struct rge {
  c b, e;
};
template <class c>
rge<c> range(c i, c j) {
  return rge<c>{i, j};
}
template <class c>
auto dud(c* x) -> decltype(cerr << *x, 0);
template <class c>
char dud(...);
struct debug {
  template <class c>
  debug& operator<<(const c&) {
    return *this;
  }
};
const long long xx = 2e5;
const long long MOD = 1e9 + 7;
const long long inf = 1e18;
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  string s;
  cin >> s;
  vector<long long> open, close;
  long long n = s.size();
  for (long long i = 0; i < n; i++) {
    if (s[i] == '(')
      open.push_back(i);
    else
      close.push_back(i);
  }
  reverse(close.begin(), close.end());
  long long opre = -1, cpre = -1;
  vector<long long> pos[1000];
  long long in = 0;
  debug() << "\033[94m ["
          << "open"
             ": "
          << (open) << "]\033[0m";
  debug() << "\033[94m ["
          << "close"
             ": "
          << (close) << "]\033[0m";
  while (1) {
    long long Mx = 0;
    for (long long i = opre + 1; i < open.size(); i++) {
      long long cnt = 0;
      for (long long j = cpre + 1; j < close.size(); j++) {
        if (close[j] > open[i]) {
          cnt++;
        }
        if (cnt >= (i - opre)) break;
      }
      debug() << "\033[94m ["
              << "i"
                 ": "
              << (i)
              << "]\033[0m"
                 "\033[94m ["
              << "cnt"
                 ": "
              << (cnt) << "]\033[0m";
      Mx = max(Mx, cnt);
    }
    debug() << "\033[94m ["
            << "Mx"
               ": "
            << (Mx) << "]\033[0m";
    if (Mx <= 0) break;
    long long x = Mx, y = Mx;
    debug() << "\033[94m ["
            << "x"
               ": "
            << (x)
            << "]\033[0m"
               "\033[94m ["
            << "y"
               ": "
            << (y) << "]\033[0m";
    while (x) {
      pos[in].push_back(open[opre + 1]);
      x--;
      opre++;
    }
    vector<long long> pp;
    while (y) {
      pp.push_back(close[cpre + 1]);
      y--;
      cpre++;
    }
    reverse(pp.begin(), pp.end());
    for (auto i : pp) {
      pos[in].push_back(i);
    }
    debug() << "\033[94m ["
            << "opre"
               ": "
            << (opre)
            << "]\033[0m"
               "\033[94m ["
            << "cpre"
               ": "
            << (cpre) << "]\033[0m";
    if (Mx) {
      in++;
    }
  }
  cout << in << '\n';
  for (long long i = 0; i < in; i++) {
    cout << pos[i].size() << '\n';
    for (auto j : pos[i]) cout << j + 1 << " ";
    cout << '\n';
  }
}
