Description
Corn is going to promote programming in the campus, so he wants to add a lot of interesting ideas to make programming more attractive. One task he is working on is to develop a new programming language because he thinks all existing ones are too simple to him. The syntax rules of the language are:
1. () () is a valid program
2. (P) (P) is a valid program, if P P is a valid program
3. PQ PQ is a valid program, if both P P and Q Q are valid programs
Corn wants a compiler for the language. For a program, if it is valid, the compiler should print the max depth in the program. For example " (()) (())" has a depth of 2 2, while " ((())()) ((())())" has a depth of 3 3. Formally, the max depth is the max number of unmatched open brackets in any prefix.
Input
Each case is a non-empty string in a single line, the string will only contain ' ( (' or ' ) )', its length will be no more than 100 100.
Output
For each case, output "YES" and the integer required above if the program is valid, separated with a space. Or "NO" if the program is invalid.
Sample Input
( ) () (()) ((())()) ()) ((
Sample Output
NO NO YES 1 YES 2 YES 3 NO NO
#include<bits/stdc++.h> using namespace std; int main() { int i,j,n,l,k,m; char a[102]; stack<char>s; while(scanf("%s",a)!=EOF) { m=0; k=0; while(!s.empty()) { s.pop(); } l=strlen(a); for(j=0;j<l;j++) { if(a[j]=='(') { k=k+1; } if(a[j]==')') { if(k>m) { m=k; } k=k-1; } if(s.empty()) { s.push(a[j]); } else if(s.top()+1==a[j]||s.top()+2==a[j]) { s.pop(); } else { s.push(a[j]); } } if(s.empty()) { printf("YES %d\n",m); } else { printf("NO\n"); } } return 0; }