栈应用, 注意在 # 出现之后不能匹配的情况
((#)(
(#((((()
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <fstream>
using namespace std;
char str[100005];
int num[100005];
int main()
{
while(cin >> str)
{
int flag = 1;
int len = strlen(str);
int left = 0;
memset(num, 0, sizeof(num));
int n = -1;
int i;
stack <char> s;
for(i = 0; i < len; i++)
{
if(str[i] == '(')
{
s.push(str[i]);
left++;
}
if(str[i] == ')')
{
if(!s.empty())
s.pop();
else
{
flag = 0;
break;
}
if(left)
left--;
}
if(str[i] == '#')
{
if(!s.empty())
s.pop();
else
{
flag = 0;
break;
}
n++;
num[n] = 1;
left = 0; //记录#之后多余(的个数
}
}
if(left > 0)
flag = 0;
while(!s.empty())
{
s.pop();
num[n]++;
}
if(flag == 0)
cout << -1 << endl;
else
for(i = 0; i <= n; i++)
{
cout << num[i] << endl;
}
}
return 0;
}