Malek has recently found a treasure map. While he was looking for a treasure he found a locked door. There was a string s written on the door consisting of characters '(', ')' and '#'. Below there was a manual on how to open the door. After spending a long time Malek managed to decode the manual and found out that the goal is to replace each '#' with one or more ')' characters so that the final string becomes beautiful.
Below there was also written that a string is called beautiful if for each i (1 ≤ i ≤ |s|) there are no more ')' characters than '(' characters among the first i characters of s and also the total number of '(' characters is equal to the total number of ')' characters.
Help Malek open the door by telling him for each '#' character how many ')' characters he must replace it with.
The first line of the input contains a string s (1 ≤ |s| ≤ 105). Each character of this string is one of the characters '(', ')' or '#'. It is guaranteed that s contains at least one '#' character.
If there is no way of replacing '#' characters which leads to a beautiful string print - 1. Otherwise for each character '#' print a separate line containing a positive integer, the number of ')' characters this character must be replaced with.
If there are several possible answers, you may output any of them.
(((#)((#)
1 2
()((#((#(#()
2 2 1
#
-1
(#)
-1
#include <cstdio>
#include <cstring>
const int maxn=100010;
char s[maxn];
int main()
{
int a=0,b=0,c=0,i;
scanf("%s",s);
int len=strlen(s);
if(s[0]==')'||s[len-1]=='('||s[0]=='#')
{
printf("-1\n");
return 0;
}
for(i=len-1;i>=0;i--)
{
if(s[i]=='(')
a++;
if(s[i]==')')
b++;
if(a>b)
{
printf("-1\n");
return 0;
}
if(s[i]=='#')break;
}
a=0,b=0;
for(i=0;i<len;i++)
{
if(s[i]=='(')//记录“(”的个数
a++;
if(s[i]==')')//如果有合法的一对括号,把他们标记为“.”
{
if(s[i-1]=='(')
{
s[i-1]='.';
s[i]='.';
b--;
a--;
}
b++;
}
if(s[i]=='#')
{
b++;
c++;
}
if(b>a)//判断“#”后面的左右括号数是否相等,左括号多则不合法
{
printf("-1\n");
return 0;
}
}
b-=c;
if(a-b<c)
{
printf("-1\n");
return 0;
}
a=0;
for(i=0;i<len;i++)
{
if(s[i]=='(')
a++;
if(s[i]==')')
{
b--;
a--;
}
if(s[i]=='#')
{
if(c>1)
{
printf("1\n");
a--;
c--;
}
else
printf("%d\n",a-b);
}
}
return 0;
}
,“#”,遇到#时把它转变成“)”,求每个#转换成几个“)”能使所有左右括号合法。