#!/usr/bin/env python3
def fillbrackets( start, end, array ) :
node = { }
if start == end:
node[ 'close' ] = 1 if array [ start] == ')' else 0
node[ 'open' ] = 1 if array [ start] == '(' else 0
else :
node[ 'left' ] = fillbrackets( start, ( end+start) //2 , array )
node[ 'right' ] = fillbrackets( ( end+start) //2 + 1 , end, array )
matched = node[ 'left' ] [ 'open' ] if node[ 'left' ] [ 'open' ] < node[ 'right' ] [ 'close' ] else node[ 'right' ] [ 'close' ]
node[ 'open' ] = node[ 'left' ] [ 'open' ] + node[ 'right' ] [ 'open' ] - matched
node[ 'close' ] = node[ 'left' ] [ 'close' ] + node[ 'right' ] [ 'close' ] - matched
return node
def updatebrackets( index, start, end, segtr) :
if start == end :
segtr[ 'open' ] , segtr[ 'close' ] = segtr[ 'close' ] , segtr[ 'open' ]
else :
if index <= ( start+end) //2 :
updatebrackets( index, start, ( start + end) //2 , segtr[ 'left' ] )
else :
updatebrackets( index, ( start + end) //2 + 1 , end, segtr[ 'right' ] )
matched = segtr[ 'left' ] [ 'open' ] if segtr[ 'left' ] [ 'open' ] < segtr[ 'right' ] [ 'close' ] else segtr[ 'right' ] [ 'close' ]
segtr[ 'open' ] = segtr[ 'left' ] [ 'open' ] + segtr[ 'right' ] [ 'open' ] - matched
segtr[ 'close' ] = segtr[ 'left' ] [ 'close' ] + segtr[ 'right' ] [ 'close' ] - matched
def checkbrackets( segtr) :
return 'YES' if segtr[ 'open' ] == 0 and segtr[ 'close' ] == 0 else 'NO'
for cases in range ( 10 ) :
print ( 'Test %d:' % int ( cases + 1 ) )
brlength = int ( input ( ) )
brackets = input ( )
oplength = int ( input ( ) )
segtree = fillbrackets( 0 , brlength-1 , brackets)
#print(segtree)
for i in range ( oplength) :
operation = int ( input ( ) )
if operation == 0 :
print ( checkbrackets( segtree) )
else :
updatebrackets( operation-1 , 0 , brlength-1 , segtree)
#print(segtree)
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKCmRlZiBmaWxsYnJhY2tldHMoc3RhcnQsIGVuZCwgYXJyYXkpOgogICAgbm9kZSA9IHt9CiAgICBpZiBzdGFydCA9PSBlbmQ6CiAgICAgICAgbm9kZVsnY2xvc2UnXSA9IDEgaWYgYXJyYXlbc3RhcnRdID09ICcpJyBlbHNlIDAKICAgICAgICBub2RlWydvcGVuJ10gPSAxIGlmIGFycmF5W3N0YXJ0XSA9PSAnKCcgZWxzZSAwCiAgICBlbHNlOgogICAgICAgIG5vZGVbJ2xlZnQnXSA9IGZpbGxicmFja2V0cyhzdGFydCwgKGVuZCtzdGFydCkvLzIsIGFycmF5KQogICAgICAgIG5vZGVbJ3JpZ2h0J10gPSBmaWxsYnJhY2tldHMoKGVuZCtzdGFydCkvLzIgKyAxLCBlbmQsIGFycmF5KQogICAgICAgIG1hdGNoZWQgPSBub2RlWydsZWZ0J11bJ29wZW4nXSBpZiBub2RlWydsZWZ0J11bJ29wZW4nXSA8IG5vZGVbJ3JpZ2h0J11bJ2Nsb3NlJ10gZWxzZSBub2RlWydyaWdodCddWydjbG9zZSddCiAgICAgICAgbm9kZVsnb3BlbiddID0gbm9kZVsnbGVmdCddWydvcGVuJ10gKyBub2RlWydyaWdodCddWydvcGVuJ10gLSBtYXRjaGVkCiAgICAgICAgbm9kZVsnY2xvc2UnXSA9IG5vZGVbJ2xlZnQnXVsnY2xvc2UnXSArIG5vZGVbJ3JpZ2h0J11bJ2Nsb3NlJ10gLSBtYXRjaGVkCiAgICByZXR1cm4gbm9kZQoKCmRlZiB1cGRhdGVicmFja2V0cyhpbmRleCwgc3RhcnQsIGVuZCwgc2VndHIpOgogICAgaWYgc3RhcnQgPT0gZW5kIDoKICAgICAgICBzZWd0clsnb3BlbiddICxzZWd0clsnY2xvc2UnXSA9IHNlZ3RyWydjbG9zZSddICxzZWd0clsnb3BlbiddIAogICAgZWxzZToKICAgICAgICBpZiBpbmRleCA8PSAoc3RhcnQrZW5kKS8vMiA6CiAgICAgICAgICAgIHVwZGF0ZWJyYWNrZXRzKGluZGV4LCBzdGFydCwgKHN0YXJ0ICsgZW5kKS8vMiwgc2VndHJbJ2xlZnQnXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICB1cGRhdGVicmFja2V0cyhpbmRleCwgKHN0YXJ0ICsgZW5kKS8vMiArIDEsIGVuZCwgc2VndHJbJ3JpZ2h0J10pCiAgICAgICAgbWF0Y2hlZCA9IHNlZ3RyWydsZWZ0J11bJ29wZW4nXSBpZiBzZWd0clsnbGVmdCddWydvcGVuJ10gPCBzZWd0clsncmlnaHQnXVsnY2xvc2UnXSBlbHNlIHNlZ3RyWydyaWdodCddWydjbG9zZSddCiAgICAgICAgc2VndHJbJ29wZW4nXSA9IHNlZ3RyWydsZWZ0J11bJ29wZW4nXSArIHNlZ3RyWydyaWdodCddWydvcGVuJ10gLSBtYXRjaGVkCiAgICAgICAgc2VndHJbJ2Nsb3NlJ10gPSBzZWd0clsnbGVmdCddWydjbG9zZSddICsgc2VndHJbJ3JpZ2h0J11bJ2Nsb3NlJ10gLSBtYXRjaGVkCgoKCmRlZiBjaGVja2JyYWNrZXRzKHNlZ3RyKToKICAgIHJldHVybiAnWUVTJyBpZiBzZWd0clsnb3BlbiddID09IDAgYW5kIHNlZ3RyWydjbG9zZSddPT0wIGVsc2UgJ05PJwoKZm9yIGNhc2VzIGluIHJhbmdlKDEwKToKICAgIHByaW50KCdUZXN0ICVkOicgJSBpbnQoY2FzZXMgKyAxKSkKICAgIGJybGVuZ3RoID0gaW50KGlucHV0KCkpCiAgICBicmFja2V0cyA9IGlucHV0KCkKICAgIG9wbGVuZ3RoID0gaW50KGlucHV0KCkpCiAgICBzZWd0cmVlID0gZmlsbGJyYWNrZXRzKDAsIGJybGVuZ3RoLTEsIGJyYWNrZXRzKQogICAgI3ByaW50KHNlZ3RyZWUpCiAgICBmb3IgaSBpbiByYW5nZShvcGxlbmd0aCk6CiAgICAgICAgb3BlcmF0aW9uID0gaW50KGlucHV0KCkpCiAgICAgICAgaWYgb3BlcmF0aW9uID09IDA6CiAgICAgICAgICAgIHByaW50KGNoZWNrYnJhY2tldHMoc2VndHJlZSkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdXBkYXRlYnJhY2tldHMob3BlcmF0aW9uLTEsIDAsIGJybGVuZ3RoLTEsIHNlZ3RyZWUpCiAgICAgICAgICAgICNwcmludChzZWd0cmVlKQo=
stdin
NAooKSgoCjQKNAowCjIKMAo0CigpKCgKNAo0CjAKMgowCjQKKCkoKAo0CjQKMAoyCjAKNAooKSgoCjQKNAowCjIKMAo0CigpKCgKNAo0CjAKMgowCjE2CigoKCkoKSkpKCkoKSgoKCkKNgowCjE0CjAKMTMKMTQKMAo0CigpKCgpKQoxCjAKNgooKSkoKCkKNAowCjMKNAowCjQ4CigpKCkoKSgoKCgoKSkpKCgpKCkoKSkpKSkoKCgoKCkpKSgoKCgoKCgpKSgpKCkpKQozCjAKNDAKMAoxMgooKCgoKSkoKSgpKSkKNQowCjkKMAo4CjAK
4
()((
4
4
0
2
0
4
()((
4
4
0
2
0
4
()((
4
4
0
2
0
4
()((
4
4
0
2
0
4
()((
4
4
0
2
0
16
((()()))()()((()
6
0
14
0
13
14
0
4
()(())
1
0
6
())(()
4
0
3
4
0
48
()()()((((()))(()()()))))((((()))((((((())()()))
3
0
40
0
12
(((())()()))
5
0
9
0
8
0