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

-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;
template <class T>
inline T mod_v(T num) {
  if (num >= 0)
    return num % 1000000007;
  else
    return (num % 1000000007 + 1000000007) % 1000000007;
}
template <class T>
inline T gcd(T a, T b) {
  a = abs(a);
  b = abs(b);
  while (b) b ^= a ^= b ^= a %= b;
  return a;
}
template <class T>
T fast_pow(T n, T p) {
  if (p == 0) return 1;
  if (p % 2) {
    T g = mod_v(mod_v(n) * mod_v(fast_pow(n, p - 1)));
    return g;
  } else {
    T g = fast_pow(n, p / 2);
    g = mod_v(mod_v(g) * mod_v(g));
    return g;
  }
}
template <class T>
inline T modInverse(T n) {
  return fast_pow(n, 1000000007 - 2);
}
template <class T>
inline void debug(string S1, T S2, string S3) {
  cout << S1 << S2 << S3;
}
bool equalTo(double a, double b) {
  if (fabs(a - b) <= 1e-9)
    return true;
  else
    return false;
}
bool notEqual(double a, double b) {
  if (fabs(a - b) > 1e-9)
    return true;
  else
    return false;
}
bool lessThan(double a, double b) {
  if (a + 1e-9 < b)
    return true;
  else
    return false;
}
bool lessThanEqual(double a, double b) {
  if (a < b + 1e-9)
    return true;
  else
    return false;
}
bool greaterThan(double a, double b) {
  if (a > b + 1e-9)
    return true;
  else
    return false;
}
bool greaterThanEqual(double a, double b) {
  if (a + 1e-9 > b)
    return true;
  else
    return false;
}
template <class T>
inline T in() {
  register char c = 0;
  register T num = 0;
  bool n = false;
  while (c < 33) c = getchar();
  while (c > 33) {
    if (c == '-')
      n = true;
    else
      num = num * 10 + c - '0';
    c = getchar();
  }
  return n ? -num : num;
}
int main() {
  string s;
  cin >> s;
  int cnt = 0;
  stack<int> st;
  bool ok = true;
  for (int i = 0; i < ((int)s.size()); i++) {
    if (s[i] == '(') {
      st.push(i);
    } else if (s[i] == ')') {
      if (!st.empty()) {
        s[st.top()] = 'x';
        s[i] = 'x';
        st.pop();
      } else {
        ok = false;
      }
    }
  }
  int ans[100005] = {-1};
  while (!st.empty()) st.pop();
  memset(ans, -1, sizeof(ans));
  ;
  for (int i = 0; i < ((int)s.size()); i++) {
    if (s[i] == '(') {
      st.push(i);
    } else if (s[i] == '#') {
      if (!st.empty()) {
        s[st.top()] = 'x';
        ans[i] = 1;
        st.pop();
      }
    }
  }
  while (!st.empty()) st.pop();
  for (int i = 0; i < ((int)s.size()); i++) {
    if (s[i] == '(') {
      st.push(i);
    } else if (s[i] == '#') {
      if (!st.empty()) {
        s[st.top()] = 'x';
        ans[i] = ans[i] + st.size();
        while (!st.empty()) {
          s[st.top()] = 'x';
          st.pop();
        }
      }
    }
  }
  if (!st.empty()) ok = false;
  for (int i = 0; i < ((int)s.size()) && ok; i++) {
    if (s[i] == '(' || s[i] == ')')
      ok = false;
    else if (s[i] == '#' && ans[i] == -1)
      ok = false;
  }
  for (int i = 0; i < ((int)s.size()) && ok; i++) {
    if (s[i] == '#') printf("%d\n", ans[i]);
  }
  if (!ok) printf("-1\n");
  return 0;
}
