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

-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;
vector<int> solve(string s) {
  vector<int> l(s.size() + 1, 0);
  vector<int> r(s.size() + 1, 0);
  int hashes = 0;
  for (int i = 0; i < s.size(); i += 1) {
    l[i + 1] = l[i];
    r[i + 1] = r[i];
    if (s[i] == '(') {
      l[i + 1] += 1;
    } else {
      r[i + 1] += 1;
    }
    if (r[i + 1] > l[i + 1]) {
      return vector<int>{-1};
    }
    if (s[i] == '#') {
      hashes += 1;
    }
  }
  vector<int> answer(hashes, 1);
  for (int i = s.size() - 1; i >= 0; i -= 1) {
    if (s[i] == '#') {
      int lefts = l[s.size()] - l[i + 1];
      int rights = r[s.size()] - r[i + 1];
      if (lefts > rights) {
        return vector<int>{-1};
      }
      int open = l[i] - l[0];
      int close = r[i] - r[0];
      int to_add = open - close - (rights - lefts);
      if (to_add <= 0) {
        return vector<int>{-1};
      }
      answer[hashes - 1] = to_add;
      return answer;
    }
  }
}
int main() {
  string s;
  while (cin >> s) {
    vector<int> ans = solve(s);
    for (int i = 0; i < ans.size(); i += 1) {
      printf("%d\n", ans[i]);
    }
  }
  return 0;
}
