Replace To Make Regular Bracket Sequence
Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u
Submit Status

Description

You are given string s consists of opening and closing brackets of four kinds <>, {}, [], (). There are two types of brackets: opening and closing. You can replace any bracket by another of the same type. For example, you can replace < by the bracket {, but you can't replace it by ) or >.

The following definition of a regular bracket sequence is well-known, so you can be familiar with it.

Let's define a regular bracket sequence (RBS). Empty string is RBS. Let s1 and s2 be a RBS then the strings <s1>s2{s1}s2[s1]s2,(s1)s2 are also RBS.

For example the string "[[(){}]<>]" is RBS, but the strings "[)()" and "][()()" are not.

Determine the least number of replaces to make the string s RBS.

Input

The only line contains a non empty string s, consisting of only opening and closing brackets of four kinds. The length of s does not exceed 106.

Output

If it's impossible to get RBS from s print Impossible.

Otherwise print the least number of replaces needed to get RBS from s.

Sample Input

Input
[<}){}
Output
2
Input
{()}[]
Output
0
Input
]]
Output
Impossible
 
代码
 1 #include<stdio.h>
 2 #include<stack>
 3 #include<queue>
 4 #include<string.h>
 5 using namespace std;
 6 int main()
 7 {     char s[1000000+10];
 8      while(scanf("%s",&s)!=EOF)
 9      {  
10        stack<char>sta;
11         int i,j,k,l,ans=1;
12         l=strlen(s);
13         
14         for(k=0,i=0;i<l;i++)
15         {  
16                if(sta.empty()&&(s[i]==']'||s[i]=='}'||s[i]=='>'||s[i]==')'))
17                      {     ans=0;
18                          break;
19                  }
20             else if(s[i]=='<'||s[i]=='{'||s[i]=='['||s[i]=='(')
21                  {  sta.push(s[i]);
22                      continue;
23                  }
24             else 
25                 { if(s[i]-sta.top()==2||s[i]-sta.top()==1)
26                      sta.pop();
27                   else 
28                       { sta.pop();
29                         k++;
30                     }
31                     
32                 }
33        }
34        if(ans==0||!sta.empty())
35           printf("Impossible\n");
36        else
37           printf("%d\n",k);
38     }
39     return 0;
40 }

 

 
 

posted on 2016-07-26 10:05  左岸zero  阅读(367)  评论(0编辑  收藏  举报

导航