#(#(#((##((()))(((#)(#()#(((()()(()#(##(((()(((()))#(((((()(((((((()#((#((()(#(((()(()##(()(((()((#(
 (#((((()
 (#((
 ((#)((#)((#)((#)((#)((#)((#)((#)((#)((#)((#)((#)((#)((#)((#)((##
 (())((((#)
 (#(
 (#))(#(#)((((#(##((#(#((((#(##((((((#((()(()(())((()#((((#((()((((#(((((#(##)(##()((((()())(((((#(((
 ##((((((()
 #((#
 #))))
 (((((#(#(#(#()
 ((#(()#(##
 (((((((((((((((((((###################
 )((##((###
 (((()#(#)(
 ((#)(
 )(((())#
 ()((#((#(#()
 ((#(
 ()#(#())()()#)(#)()##)#((()#)((#)()#())((#((((((((#)()()(()()(((((#)#(#((((#((##()(##(((#(()(#((#))#

-1
 -1
 -1
 1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
 3
 -1
 -1
 -1
 -1
 -1
 1
1
1
5
 1
1
1
1
 1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
 -1
 -1
 -1
 -1
 1
1
3
 -1
 -1

#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  string s;
  cin >> s;
  int nest = 0;
  const int sharps = count(s.begin(), s.end(), '#');
  int used_sharps = 0;
  int left_nest;
  int right_nest = 0;
  int right_min_nest = s.length();
  for (auto c : s) {
    switch (c) {
      case '(':
        nest += 1;
        if (used_sharps == sharps) {
          right_nest += 1;
        }
        break;
      case ')':
        nest -= 1;
        if (nest < 0) goto failure;
        if (used_sharps == sharps) {
          right_nest -= 1;
          right_min_nest = min(right_min_nest, nest);
        }
        break;
      case '#':
        nest -= 1;
        if (nest < 0) goto failure;
        used_sharps += 1;
        if (used_sharps == sharps) {
          left_nest = nest + 1;
        }
        break;
      default:
        assert(false);
    }
  }
  if (right_nest <= 0 and 0 <= right_min_nest - (left_nest + right_nest - 1)) {
    for (int i = 0; i < (sharps - 1); ++i) cout << 1 << endl;
    cout << left_nest + right_nest << endl;
  } else {
  failure:
    cout << -1 << endl;
  }
  return 0;
}
