1. 程式人生 > >CodeForces - 5C Longest Regular Bracket Sequence

CodeForces - 5C Longest Regular Bracket Sequence

amp codeforce pac pro while number rac name index

This is yet another problem dealing with regular bracket sequences.

We should remind you that a bracket sequence is called regular, if by inserting ?+? and ?1? into it we can get a correct mathematical expression. For example, sequences ?(())()?, ?()? and ?(()(()))? are regular, while ?)(?, ?(()? and ?(()))(? are not.

You are given a string of ?(? and ?)? characters. You are to find its longest substring that is a regular bracket sequence. You are to find the number of such substrings as well.

Input

The first line of the input file contains a non-empty string, consisting of ?(? and ?)? characters. Its length does not exceed 106

.

Output

Print the length of the longest substring that is a regular bracket sequence, and the number of such substrings. If there are no such substrings, write the only line containing "0 1".

Example

Input
)((())))(()())
Output
6 2
Input
))(
Output
0 1
 1 #include<iostream>
 2 #include<string
.h> 3 #include<cstdio> 4 #include<stack> 5 6 using namespace std; 7 8 char s[1000005]; 9 int dp[1000005]; 10 stack<int> st; 11 12 int main() 13 { 14 scanf("%s",s); 15 int ans=0,maxx=0,i,l=strlen(s); 16 for(i=0;i<l;++i) 17 { 18 if(s[i]==() 19 st.push(i); 20 else 21 { 22 if(!st.empty()) 23 { 24 int t=st.top(); 25 st.pop(); 26 dp[i]=dp[t-1]+i-t+1; 27 if(dp[i]>maxx) 28 { 29 maxx=dp[i]; 30 ans=1; 31 } 32 else if(dp[i]==maxx) 33 ans++; 34 } 35 } 36 } 37 if(!maxx) 38 ans=1; 39 printf("%d %d\n",maxx,ans); 40 41 return 0; 42 }

CodeForces - 5C Longest Regular Bracket Sequence