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

-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;
double const EPS = 2.22045e-016;
unsigned long long int fact(unsigned long long int n) {
  if (n == 1 || n == 0) return 1;
  return n * fact(n - 1);
}
void print_v(vector<int> arr) {
  long long int n = ((int)((arr).size()));
  for (long long int i = 0; i < n; ++i)
    if (i == n - 1) {
      printf("%d\n", arr[i]);
    } else {
      printf("%d ", arr[i]);
    }
}
long long int gcd(long long int a, long long int b) {
  return (b == 0 ? a : gcd(b, a % b));
}
long long int lcm(long long int a, long long int b) {
  return ((a * b) / gcd(a, b));
}
bool comp(long long int x, long long int y) { return x > y; }
long long int str2int(string s) {
  istringstream ss(s);
  long long int t;
  ss >> t;
  return t;
}
long long int pw(long long int b, long long int p) {
  if (!p) return 1;
  long long int sq = pw(b, p / 2);
  sq *= sq;
  if (p % 2) sq *= b;
  return sq;
}
long long int sd(long long int x) { return x < 10 ? x : x % 10 + sd(x / 10); }
long long int sq(long long int x) {
  for (long long int i = 0; i < x; ++i)
    if ((long long int)i * i > x) return (i - 1);
  return long long int(1);
}
bool is_integer(float k) { return std::floor(k) == k; }
vector<bool> sieve;
void Sieve(long long int limit) {
  sieve.resize(limit, true);
  long long int sqrtlimit = sq(limit);
  for (long long int n = 4; n <= limit; n = n + 2) {
    sieve[n] = false;
  }
  for (long long int n = 3; n <= sqrtlimit; n = n + 2) {
    if (sieve[n]) {
      for (long long int m = n * n; m <= limit; m = m + (2 * n)) {
        sieve[m] = false;
      }
    }
  }
  sieve[1] = false;
  sieve[0] = false;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  string str;
  cin >> str;
  long long int o = 0;
  vector<int> open;
  for (long long int i = 0; i < ((long long int)((str).size())); ++i) {
    if (str[i] == '(') {
      o++;
      open.push_back(i);
    }
    if (str[i] == ')')
      if (o) {
        --o;
        str[i] = '~';
        str[open.back()] = '~';
        open.pop_back();
      }
  }
  o = 0;
  long long int op = 0;
  long long int cl = 0;
  for (long long int i = 0; i < ((long long int)((str).size())); ++i) {
    if (str[i] == '(') op++;
    if (str[i] == ')') cl++;
  }
  if (op == 0 || cl) return cout << -1, false;
  for (long long int i = 0; i < ((long long int)((str).size())); ++i) {
    if (str[i] == '(') o++;
    if (str[i] == '#') {
      cout << o << endl;
      o = 0;
    }
  }
  return false;
}
