#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define hell (ll)(1e9+7)
#define rep(i,a,b) for(int i=a;i<b;i++)
#define sep(i,a,b) for(int i=a-1;i>=b;i--)
// opencount ->no of '(' in string
// closecount -> no of ')' in string
// open -> no of '(' required to the left of string for valid expression
// close -> no of ')' required to the right of string for valid expression
struct g
{
ll open,close,opencount,closecount;
};
vector <ll> a;
vector <g> tree;
g merger(g l,g r)
{
g ans;
ans.closecount=l.closecount+r.closecount;
ans.opencount=l.opencount+r.opencount;
ans.open=max((ll)0,ans.closecount-ans.opencount);
ans.close=max((ll)0,ans.opencount-ans.closecount);
return ans;
}
void build_tree(ll node,ll s,ll e)
{
if(s==e)
{
if(a[s]==1)
{
tree[node].opencount=tree[node].close=1;
tree[node].closecount=tree[node].open=0;
}
else
{
tree[node].closecount=tree[node].open=1;
tree[node].opencount=tree[node].close=0;
}
return;
}
ll m=(s+e)/2;
build_tree(node*2,s,m);
build_tree(node*2+1,m+1,e);
tree[node]=merger(tree[node*2],tree[node*2+1]);
}
void update_tree(ll node,ll s,ll e,ll id)
{
if(s==e)
{
if(a[s]==1)
a[s]=-1;
else
a[s]=1;
if(a[s]==1)
{
tree[node].opencount=tree[node].close=1;
tree[node].closecount=tree[node].open=0;
}
else
{
tree[node].closecount=tree[node].open=1;
tree[node].opencount=tree[node].close=0;
}
return;
}
ll m=(s+e)/2;
if(s<=id&&id<=m)
update_tree(node*2,s,m,id);
else
update_tree(node*2+1,m+1,e,id);
tree[node]=merger(tree[node*2],tree[node*2+1]);
}
int main()
{
//ios_base::sync_with_stdio(false);
//cin.tie(0);
for(int t=1;t<=10;t++)
{
ll n;
string s;
cin>>n>>s;
a.resize(n);
tree.resize(4*n);
rep(i,0,n)
{
if(s[i]=='(')
a[i]=1;
else
a[i]=-1;
}
cout<<"Test "<<t<<":\n";
build_tree(1,0,n-1);
ll q;
cin>>q;
while(q--)
{
ll k;
cin>>k;
g ans;
if(k==0)
{
ans=tree[1];
if(ans.close==0&&ans.open==0)
cout<<"YES\n";
else
cout<<"NO\n";
}
else
update_tree(1,0,n-1,k-1);
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZyBpbnQKI2RlZmluZSBoZWxsIChsbCkoMWU5KzcpCiNkZWZpbmUgcmVwKGksYSxiKSBmb3IoaW50IGk9YTtpPGI7aSsrKQojZGVmaW5lIHNlcChpLGEsYikgZm9yKGludCBpPWEtMTtpPj1iO2ktLSkKCi8vIG9wZW5jb3VudCAtPm5vIG9mICcoJyBpbiBzdHJpbmcKLy8gY2xvc2Vjb3VudCAtPiBubyBvZiAnKScgaW4gc3RyaW5nCi8vIG9wZW4gLT4gbm8gb2YgJygnIHJlcXVpcmVkIHRvIHRoZSBsZWZ0IG9mIHN0cmluZyBmb3IgdmFsaWQgZXhwcmVzc2lvbgovLyBjbG9zZSAtPiBubyBvZiAnKScgcmVxdWlyZWQgdG8gdGhlIHJpZ2h0IG9mIHN0cmluZyBmb3IgdmFsaWQgZXhwcmVzc2lvbgpzdHJ1Y3QgZwp7CiAgICBsbCBvcGVuLGNsb3NlLG9wZW5jb3VudCxjbG9zZWNvdW50Owp9OwoKdmVjdG9yIDxsbD4gYTsKdmVjdG9yIDxnPiB0cmVlOwoKZyBtZXJnZXIoZyBsLGcgcikKewogICAgZyBhbnM7CiAgICBhbnMuY2xvc2Vjb3VudD1sLmNsb3NlY291bnQrci5jbG9zZWNvdW50OwogICAgYW5zLm9wZW5jb3VudD1sLm9wZW5jb3VudCtyLm9wZW5jb3VudDsKICAgIGFucy5vcGVuPW1heCgobGwpMCxhbnMuY2xvc2Vjb3VudC1hbnMub3BlbmNvdW50KTsKICAgIGFucy5jbG9zZT1tYXgoKGxsKTAsYW5zLm9wZW5jb3VudC1hbnMuY2xvc2Vjb3VudCk7CiAgICByZXR1cm4gYW5zOwp9Cgp2b2lkIGJ1aWxkX3RyZWUobGwgbm9kZSxsbCBzLGxsIGUpCnsKICAgIGlmKHM9PWUpCiAgICB7CiAgICAgICAgaWYoYVtzXT09MSkKICAgICAgICB7CiAgICAgICAgICAgIHRyZWVbbm9kZV0ub3BlbmNvdW50PXRyZWVbbm9kZV0uY2xvc2U9MTsKICAgICAgICAgICAgdHJlZVtub2RlXS5jbG9zZWNvdW50PXRyZWVbbm9kZV0ub3Blbj0wOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICB0cmVlW25vZGVdLmNsb3NlY291bnQ9dHJlZVtub2RlXS5vcGVuPTE7CiAgICAgICAgICAgIHRyZWVbbm9kZV0ub3BlbmNvdW50PXRyZWVbbm9kZV0uY2xvc2U9MDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbGwgbT0ocytlKS8yOwogICAgYnVpbGRfdHJlZShub2RlKjIscyxtKTsKICAgIGJ1aWxkX3RyZWUobm9kZSoyKzEsbSsxLGUpOwogICAgdHJlZVtub2RlXT1tZXJnZXIodHJlZVtub2RlKjJdLHRyZWVbbm9kZSoyKzFdKTsKfQoKdm9pZCB1cGRhdGVfdHJlZShsbCBub2RlLGxsIHMsbGwgZSxsbCBpZCkKewogICAgaWYocz09ZSkKICAgIHsKICAgICAgICBpZihhW3NdPT0xKQogICAgICAgIGFbc109LTE7CiAgICAgICAgZWxzZQogICAgICAgIGFbc109MTsKICAgICAgICBpZihhW3NdPT0xKQogICAgICAgIHsKICAgICAgICAgICAgdHJlZVtub2RlXS5vcGVuY291bnQ9dHJlZVtub2RlXS5jbG9zZT0xOwogICAgICAgICAgICB0cmVlW25vZGVdLmNsb3NlY291bnQ9dHJlZVtub2RlXS5vcGVuPTA7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHRyZWVbbm9kZV0uY2xvc2Vjb3VudD10cmVlW25vZGVdLm9wZW49MTsKICAgICAgICAgICAgdHJlZVtub2RlXS5vcGVuY291bnQ9dHJlZVtub2RlXS5jbG9zZT0wOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CiAgICBsbCBtPShzK2UpLzI7CiAgICBpZihzPD1pZCYmaWQ8PW0pCiAgICB1cGRhdGVfdHJlZShub2RlKjIscyxtLGlkKTsKICAgIGVsc2UKICAgIHVwZGF0ZV90cmVlKG5vZGUqMisxLG0rMSxlLGlkKTsKICAgIHRyZWVbbm9kZV09bWVyZ2VyKHRyZWVbbm9kZSoyXSx0cmVlW25vZGUqMisxXSk7Cn0KCmludCBtYWluKCkKewogICAgLy9pb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIC8vY2luLnRpZSgwKTsKICAgIGZvcihpbnQgdD0xO3Q8PTEwO3QrKykKICAgIHsKICAgICAgICBsbCBuOwogICAgICAgIHN0cmluZyBzOwogICAgICAgIGNpbj4+bj4+czsKICAgICAgICBhLnJlc2l6ZShuKTsKICAgICAgICB0cmVlLnJlc2l6ZSg0Km4pOwogICAgICAgIHJlcChpLDAsbikKICAgICAgICB7CiAgICAgICAgICAgIGlmKHNbaV09PScoJykKICAgICAgICAgICAgYVtpXT0xOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGFbaV09LTE7CiAgICAgICAgfQogICAgICAgIGNvdXQ8PCJUZXN0ICI8PHQ8PCI6XG4iOwogICAgICAgIGJ1aWxkX3RyZWUoMSwwLG4tMSk7CiAgICAgICAgbGwgcTsKICAgICAgICBjaW4+PnE7CiAgICAgICAgd2hpbGUocS0tKQogICAgICAgIHsKICAgICAgICAgICAgbGwgazsKICAgICAgICAgICAgY2luPj5rOwogICAgICAgICAgICBnIGFuczsKICAgICAgICAgICAgaWYoaz09MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYW5zPXRyZWVbMV07CiAgICAgICAgICAgICAgICBpZihhbnMuY2xvc2U9PTAmJmFucy5vcGVuPT0wKQogICAgICAgICAgICAgICAgY291dDw8IllFU1xuIjsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNvdXQ8PCJOT1xuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHVwZGF0ZV90cmVlKDEsMCxuLTEsay0xKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQo=