BRCKTS - Brackets

We will call a bracket word any word constructed out of two sorts of characters: the opening bracket "(" and the closing bracket ")". Among these words we will distinguish correct bracket expressions. These are such bracket words in which the brackets can be matched into pairs such that

  • every pair consists of an opening bracket and a closing bracket appearing further in the bracket word
  • for every pair the part of the word between the brackets of this pair has equal number of opening and closing brackets
On a bracket word one can do the following operations:
  • replacement -- changes the i-th bracket into the opposite one
  • check -- if the word is a correct bracket expression

Task

Write a program which

  • reads (from standard input) the bracket word and the sequence of operations performed,
  • for every check operation determines if the current bracket word is a correct bracket expression,
  • writes out the outcome (to standard output).

Input

Ten test cases (given one under another, you have to process all!). Each of the test cases is a series of lines. The first line of a test consists of a single number n (1<=n<=30000) denoting the length of the bracket word. The second line consists of n brackets, not separated by any spaces. The third line consists of a single number m -- the number of operations. Each of the following m lines carries a number k denoting the operation performed. k=0 denotes the check operation, k>0 denotes replacement of k-th bracket by the opposite.

Output

For every test case your program should print a line:
Test i:
where i is replaced by the number of the test and in the following lines, for every check operation in the i-th test your program should print a line with the word YES, if the current bracket word is a correct bracket expression, and a line with a word NO otherwise. (There should be as many lines as check operations in the test.)

Example

Input:
4
()((
4
4
0
2
0
[and 9 test cases more]
Output:
Test 1:
YES
NO
[and 9 test cases more]

Warning: large Input/Output data, be careful with certain languages

Added by:Adam Dzedzej
Date:2004-06-15
Time limit:11s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All except: NODEJS PERL6 VB.NET
Resource:Internet Contest Pogromcy Algorytmow(Algorithm Tamers) 2003 Round IV

hide comments
2014-04-27 15:05:55 humble_coder
any limit on m???
2013-11-26 11:41:48 rd
Hi
If we get a run time exceeded etc how to find out the issue ? there should be some way to show where testing has failed
2013-11-20 20:18:45 Rajesh Kumar Pal
printf is much faster than cout :P :P
2013-01-30 05:42:08 Santiago Palacio
For c++... i highly recommend NOT USING string, use char [] and scanf.
2013-01-19 23:08:36 nitish25
is this ())(() correct bracket expression?
RE : No, each opening bracket must be followed by corresponding closing bracket. Here's what all can come http://en.wikipedia.org/wiki/Context-free_grammar#Well-formed_parentheses

Last edit: 2013-01-28 15:50:01
2012-12-06 11:29:23 YangYue
Is there a O(n) way to solve this problem?
Can someone tell me ?
2015-01-04 11:19:38 PengFei Du
O(n) is truth that can get TLE.
You should use [spoiler removed] to process it:)

Last edit: 2015-01-04 11:19:31
2012-06-19 18:40:27 rahul singh
@seshadri ..i think first is NO and second is YES
2012-06-08 16:48:35 raw_input()
o(n) is enough but still getting TLE.
2012-06-04 09:06:37 Rahul Dubey
getting tle please help ???
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.