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

-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>
#pragma comment(linker, "/STACK:1164777216")
using namespace std;
template <class T>
inline T sqr(T x) {
  return x * x;
}
const double pi = acos(-1.0), eps = 1e-9;
const int INF = 1000 * 1000 * 1000 + 5, MAXN = 100005, MOD = 1000007;
void prepare(string s) {
  if ((int)s.size() != 0) {
    freopen((s + ".in").c_str(), "r", stdin);
    freopen((s + ".out").c_str(), "w", stdout);
  }
}
string s;
vector<int> pos;
int num1[MAXN], num2[MAXN], ans[MAXN], Min[MAXN];
bool check() {
  for (int i = 0; i < (int)s.size(); ++i)
    if (num1[i] < num2[i]) return false;
  return true;
}
void solve() {
  cin >> s;
  bool flag = false;
  for (int i = 0; i < (int)s.size(); ++i)
    if (s[i] == '#') {
      s[i] = ')';
      flag = true;
      ans[i]++;
      pos.push_back(i);
    }
  if (s[0] == '(')
    num1[0]++;
  else
    num2[0]++;
  for (int i = 1; i < (int)s.size(); i++) {
    if (s[i] == '(') {
      num1[i] = num1[i - 1] + 1;
      num2[i] = num2[i - 1];
    } else {
      num2[i] = num2[i - 1] + 1;
      num1[i] = num1[i - 1];
    }
  }
  if (!flag) {
    if (!check()) cout << -1;
    return;
  }
  int cnt = num1[(int)s.size() - 1] - num2[(int)s.size() - 1];
  if (!check())
    cout << -1;
  else {
    int Num = 0;
    Min[(int)s.size() - 1] = num1[(int)s.size() - 1] - num2[(int)s.size() - 1];
    for (int i = (int)s.size() - 2; i >= pos[0]; i--)
      Min[i] = min(Min[i + 1], num1[i] - num2[i]);
    int tmp = INF;
    for (int i = pos[0]; i <= pos.back(); i++) tmp = min(tmp, Min[i]);
    tmp = max(tmp, num1[pos.back()] - num2[pos.back()]);
    if (cnt > tmp)
      cout << -1;
    else {
      ans[pos[(int)pos.size() - 1]] += cnt;
      for (int i = 0; i < (int)pos.size(); ++i) cout << ans[pos[i]] << '\n';
    }
  }
}
int main() {
  prepare("");
  srand(time(NULL));
  solve();
  return 0;
}
