#include<bits/stdc++.h>
#define lld long long
#define MAX 100005
using namespace std;
lld array[ MAX + 1 ];
lld tree[ 4 * MAX + 1 ];
void init(int i, int start, int end ) {
if(start==end)
{
tree[i] = array[start];
return;
}
int mid = (start+end)/2;
init(2*i,start,mid);
init(2*i+1,mid+1,end);
tree[i] = tree[2*i] + tree[2*i+1];
}
lld query( int i, int start, int end, int qs, int qe ) {
if(start>end||qs>end||qe<start)
return 0;
if(qs<=start&&qe>=end)
return tree[i];
int mid = (start+end)/2;
return query(2*i,start,mid,qs,qe) + query(2*i+1,mid+1,end,qs,qe);
}
char str[MAX];
struct strNode
{
int sum1,sum2,sum3,sum4,minsum1,minsum2,minsum3,minsum4;
}stree[4*MAX+1];
void sinit(int Node,int i,int j)
{
if(i==j)
{
int x = 0;
stree[Node].sum1 = stree[Node].minsum1 = x;
stree[Node].sum2 = stree[Node].minsum2 = x;
stree[Node].sum3 = stree[Node].minsum3 = x;
stree[Node].sum4 = stree[Node].minsum4 = x;
if(str[i]=='(')
stree[Node].sum1 = stree[Node].minsum1 += 1;
else if(str[i]==')')
stree[Node].sum1 = stree[Node].minsum1 -= 1;
else if(str[i]=='{')
stree[Node].sum2 = stree[Node].minsum2 += 1;
else if(str[i]=='}')
stree[Node].sum2 = stree[Node].minsum2 -= 1;
else if(str[i]=='<')
stree[Node].sum3 = stree[Node].minsum3 += 1;
else if(str[i]=='>')
stree[Node].sum3 = stree[Node].minsum3 -= 1;
else if(str[i]=='[')
stree[Node].sum4 = stree[Node].minsum4 += 1;
else if(str[i]==']')
stree[Node].sum4 = stree[Node].minsum4 -= 1;
return;
}
int m = (i+j)/2;
sinit(2*Node, i, m);
sinit(2*Node+1, m+1, j);
stree[Node].sum1 = stree[2*Node].sum1 + stree[2*Node+1].sum1;
stree[Node].minsum1 = min(stree[2*Node].minsum1, stree[2*Node].sum1 + stree[2*Node+1].minsum1);
stree[Node].sum2 = stree[2*Node].sum2 + stree[2*Node+1].sum2;
stree[Node].minsum2 = min(stree[2*Node].minsum2, stree[2*Node].sum2 + stree[2*Node+1].minsum2);
stree[Node].sum3 = stree[2*Node].sum3 + stree[2*Node+1].sum3;
stree[Node].minsum3 = min(stree[2*Node].minsum3, stree[2*Node].sum3 + stree[2*Node+1].minsum3);
stree[Node].sum4 = stree[2*Node].sum4 + stree[2*Node+1].sum4;
stree[Node].minsum4 = min(stree[2*Node].minsum4, stree[2*Node].sum4 + stree[2*Node+1].minsum4);
}
strNode squery(int i,int start,int end,int qs,int qe)
{
if(start>end||qs>end||qe<start)
{
strNode temp;
temp.sum1 = LONG_MIN;
return temp;
}
if(qs<=start&&qe>=end)
return stree[i];
int mid = (start + end)/2;
strNode id1 = squery(2*i,start,mid,qs,qe);
strNode id2 = squery(2*i+1,mid+1,end,qs,qe);
if(id1.sum1==LONG_MIN)return id2;
if(id2.sum1==LONG_MIN)return id1;
strNode temp;
temp.sum1 = id1.sum1 + id2.sum1;
temp.minsum1 = min(id1.minsum1, id1.sum1 + id2.minsum1);
temp.sum2 = id1.sum2 + id2.sum2;
temp.minsum2 = min(id1.minsum2, id1.sum2 + id2.minsum2);
temp.sum3 = id1.sum3 + id2.sum3;
temp.minsum3 = min(id1.minsum3, id1.sum3 + id2.minsum3);
temp.sum4 = id1.sum4 + id2.sum4;
temp.minsum4 = min(id1.minsum4, id1.sum4 + id2.minsum4);
return temp;
}
int main() {
int i, N, q, l, r,t;
cin>>t;
while(t--)
{
cin>>N;
cin>>str;
sinit(1, 0, N - 1);
for ( i = 0; i < N; i++ ) {
cin>>array[i];
}
init(1, 0, N - 1 );
lld count = 0;
stack<int> s1,s2,s3,s4;
s1.push(0);
s2.push(0);
s3.push(0);
s4.push(0);
int b1 = 0,b2 = 0,b3 = 0,b4 = 0;
for(int i=1;str[i]!='\0';i++)
{
int last_idx = 0;
if(str[i]=='('||str[i]=='<'||str[i]=='['||str[i]=='{')
{
if(str[i]=='(')
s1.push(i);
else if(str[i] == '[')
s2.push(i);
else if(str[i]=='{')
s3.push(i);
else
s4.push(i);
continue;
}
if(str[i]==')')
{
last_idx = s1.top();
s1.pop();
if(s1.empty())
s1.push(0);
}
else if(str[i] == ']'){
last_idx = s2.top();
s2.pop();
if(s2.empty())
s2.push(0);
}
else if(str[i]=='}')
{
last_idx = s3.top();
s3.pop();
if(s3.empty())
s3.push(0);
}
else
{
last_idx = s4.top();
s4.pop();
if(s4.empty())
s4.push(0);
}
strNode xx = squery(1,0,N-1,last_idx,i);
if(xx.sum1==0&&xx.minsum1==0&&xx.sum2==0&&xx.minsum2==0&&xx.sum3==0&&xx.minsum3==0&&xx.sum4==0&&xx.minsum4==0)
count = max(count,query(1,0,N-1,last_idx,i));
}
printf("%lld\n",count);
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCiNkZWZpbmUgbGxkIGxvbmcgbG9uZwojZGVmaW5lIE1BWCAxMDAwMDUKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpsbGQgYXJyYXlbIE1BWCArIDEgXTsKbGxkIHRyZWVbIDQgKiBNQVggKyAxIF07Cgp2b2lkIGluaXQoaW50IGksIGludCBzdGFydCwgaW50IGVuZCApIHsKCiAgICBpZihzdGFydD09ZW5kKQogICAgewogICAgICAgIHRyZWVbaV0gPSBhcnJheVtzdGFydF07CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZCA9IChzdGFydCtlbmQpLzI7CiAgICBpbml0KDIqaSxzdGFydCxtaWQpOwogICAgaW5pdCgyKmkrMSxtaWQrMSxlbmQpOwogICAgdHJlZVtpXSA9IHRyZWVbMippXSArIHRyZWVbMippKzFdOwp9CgpsbGQgcXVlcnkoIGludCBpLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBxcywgaW50IHFlICkgewoKICAgIGlmKHN0YXJ0PmVuZHx8cXM+ZW5kfHxxZTxzdGFydCkKICAgICAgICByZXR1cm4gMDsKICAgIGlmKHFzPD1zdGFydCYmcWU+PWVuZCkKICAgICAgICByZXR1cm4gdHJlZVtpXTsKCiAgICBpbnQgbWlkID0gKHN0YXJ0K2VuZCkvMjsKICAgIHJldHVybiBxdWVyeSgyKmksc3RhcnQsbWlkLHFzLHFlKSArIHF1ZXJ5KDIqaSsxLG1pZCsxLGVuZCxxcyxxZSk7Cn0KCmNoYXIgc3RyW01BWF07CnN0cnVjdCBzdHJOb2RlCnsKICAgIGludCBzdW0xLHN1bTIsc3VtMyxzdW00LG1pbnN1bTEsbWluc3VtMixtaW5zdW0zLG1pbnN1bTQ7Cn1zdHJlZVs0Kk1BWCsxXTsKCnZvaWQgc2luaXQoaW50IE5vZGUsaW50IGksaW50IGopCnsKICAgIGlmKGk9PWopCiAgICB7CiAgICAgICAgaW50IHggPSAwOwogICAgICAgIHN0cmVlW05vZGVdLnN1bTEgPSBzdHJlZVtOb2RlXS5taW5zdW0xID0geDsKICAgICAgICBzdHJlZVtOb2RlXS5zdW0yID0gc3RyZWVbTm9kZV0ubWluc3VtMiA9IHg7CiAgICAgICAgc3RyZWVbTm9kZV0uc3VtMyA9IHN0cmVlW05vZGVdLm1pbnN1bTMgPSB4OwogICAgICAgIHN0cmVlW05vZGVdLnN1bTQgPSBzdHJlZVtOb2RlXS5taW5zdW00ID0geDsKCiAgICAgICAgaWYoc3RyW2ldPT0nKCcpCiAgICAgICAgICAgIHN0cmVlW05vZGVdLnN1bTEgPSBzdHJlZVtOb2RlXS5taW5zdW0xICs9IDE7CiAgICAgICAgZWxzZSBpZihzdHJbaV09PScpJykKICAgICAgICAgICAgc3RyZWVbTm9kZV0uc3VtMSA9IHN0cmVlW05vZGVdLm1pbnN1bTEgLT0gMTsKICAgICAgICBlbHNlIGlmKHN0cltpXT09J3snKQogICAgICAgICAgICBzdHJlZVtOb2RlXS5zdW0yID0gc3RyZWVbTm9kZV0ubWluc3VtMiArPSAxOwogICAgICAgIGVsc2UgaWYoc3RyW2ldPT0nfScpCiAgICAgICAgICAgIHN0cmVlW05vZGVdLnN1bTIgPSBzdHJlZVtOb2RlXS5taW5zdW0yIC09IDE7CiAgICAgICAgZWxzZSBpZihzdHJbaV09PSc8JykKICAgICAgICAgICAgc3RyZWVbTm9kZV0uc3VtMyA9IHN0cmVlW05vZGVdLm1pbnN1bTMgKz0gMTsKICAgICAgICBlbHNlIGlmKHN0cltpXT09Jz4nKQogICAgICAgICAgICBzdHJlZVtOb2RlXS5zdW0zID0gc3RyZWVbTm9kZV0ubWluc3VtMyAtPSAxOwogICAgICAgIGVsc2UgaWYoc3RyW2ldPT0nWycpCiAgICAgICAgICAgIHN0cmVlW05vZGVdLnN1bTQgPSBzdHJlZVtOb2RlXS5taW5zdW00ICs9IDE7CiAgICAgICAgZWxzZSBpZihzdHJbaV09PSddJykKICAgICAgICAgICAgc3RyZWVbTm9kZV0uc3VtNCA9IHN0cmVlW05vZGVdLm1pbnN1bTQgLT0gMTsKCQlyZXR1cm47CiAgICB9CiAgICBpbnQgbSA9IChpK2opLzI7CgoJc2luaXQoMipOb2RlLCBpLCBtKTsKCXNpbml0KDIqTm9kZSsxLCBtKzEsIGopOwoKCXN0cmVlW05vZGVdLnN1bTEgPSBzdHJlZVsyKk5vZGVdLnN1bTEgKyBzdHJlZVsyKk5vZGUrMV0uc3VtMTsKCXN0cmVlW05vZGVdLm1pbnN1bTEgPSBtaW4oc3RyZWVbMipOb2RlXS5taW5zdW0xLCBzdHJlZVsyKk5vZGVdLnN1bTEgKyBzdHJlZVsyKk5vZGUrMV0ubWluc3VtMSk7CglzdHJlZVtOb2RlXS5zdW0yID0gc3RyZWVbMipOb2RlXS5zdW0yICsgc3RyZWVbMipOb2RlKzFdLnN1bTI7CglzdHJlZVtOb2RlXS5taW5zdW0yID0gbWluKHN0cmVlWzIqTm9kZV0ubWluc3VtMiwgc3RyZWVbMipOb2RlXS5zdW0yICsgc3RyZWVbMipOb2RlKzFdLm1pbnN1bTIpOwoJc3RyZWVbTm9kZV0uc3VtMyA9IHN0cmVlWzIqTm9kZV0uc3VtMyArIHN0cmVlWzIqTm9kZSsxXS5zdW0zOwoJc3RyZWVbTm9kZV0ubWluc3VtMyA9IG1pbihzdHJlZVsyKk5vZGVdLm1pbnN1bTMsIHN0cmVlWzIqTm9kZV0uc3VtMyArIHN0cmVlWzIqTm9kZSsxXS5taW5zdW0zKTsKCXN0cmVlW05vZGVdLnN1bTQgPSBzdHJlZVsyKk5vZGVdLnN1bTQgKyBzdHJlZVsyKk5vZGUrMV0uc3VtNDsKCXN0cmVlW05vZGVdLm1pbnN1bTQgPSBtaW4oc3RyZWVbMipOb2RlXS5taW5zdW00LCBzdHJlZVsyKk5vZGVdLnN1bTQgKyBzdHJlZVsyKk5vZGUrMV0ubWluc3VtNCk7Cn0KCnN0ck5vZGUgc3F1ZXJ5KGludCBpLGludCBzdGFydCxpbnQgZW5kLGludCBxcyxpbnQgcWUpCnsKICAgIGlmKHN0YXJ0PmVuZHx8cXM+ZW5kfHxxZTxzdGFydCkKICAgIHsKICAgICAgICBzdHJOb2RlIHRlbXA7CiAgICAgICAgdGVtcC5zdW0xID0gTE9OR19NSU47CiAgICAgICAgcmV0dXJuIHRlbXA7CiAgICB9CgogICAgaWYocXM8PXN0YXJ0JiZxZT49ZW5kKQogICAgICAgIHJldHVybiBzdHJlZVtpXTsKCiAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKS8yOwoKICAgIHN0ck5vZGUgaWQxID0gc3F1ZXJ5KDIqaSxzdGFydCxtaWQscXMscWUpOwogICAgc3RyTm9kZSBpZDIgPSBzcXVlcnkoMippKzEsbWlkKzEsZW5kLHFzLHFlKTsKCiAgICBpZihpZDEuc3VtMT09TE9OR19NSU4pcmV0dXJuIGlkMjsKICAgIGlmKGlkMi5zdW0xPT1MT05HX01JTilyZXR1cm4gaWQxOwoKICAgIHN0ck5vZGUgdGVtcDsKCiAgICB0ZW1wLnN1bTEgPSBpZDEuc3VtMSArIGlkMi5zdW0xOwoJdGVtcC5taW5zdW0xID0gbWluKGlkMS5taW5zdW0xLCBpZDEuc3VtMSArIGlkMi5taW5zdW0xKTsKCXRlbXAuc3VtMiA9IGlkMS5zdW0yICsgaWQyLnN1bTI7Cgl0ZW1wLm1pbnN1bTIgPSBtaW4oaWQxLm1pbnN1bTIsIGlkMS5zdW0yICsgaWQyLm1pbnN1bTIpOwoJdGVtcC5zdW0zID0gaWQxLnN1bTMgKyBpZDIuc3VtMzsKCXRlbXAubWluc3VtMyA9IG1pbihpZDEubWluc3VtMywgaWQxLnN1bTMgKyBpZDIubWluc3VtMyk7Cgl0ZW1wLnN1bTQgPSBpZDEuc3VtNCArIGlkMi5zdW00OwoJdGVtcC5taW5zdW00ID0gbWluKGlkMS5taW5zdW00LCBpZDEuc3VtNCArIGlkMi5taW5zdW00KTsKCiAgICByZXR1cm4gdGVtcDsKfQoKCmludCBtYWluKCkgewogICAgaW50IGksIE4sIHEsIGwsIHIsdDsKCgogICAgY2luPj50OwoKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgIGNpbj4+TjsKCiAgICBjaW4+PnN0cjsKCiAgICBzaW5pdCgxLCAwLCBOIC0gMSk7CgogICAgZm9yICggaSA9IDA7IGkgPCBOOyBpKysgKSB7CiAgICAgICAgY2luPj5hcnJheVtpXTsKICAgIH0KICAgIGluaXQoMSwgMCwgTiAtIDEgKTsKICAgIGxsZCBjb3VudCA9IDA7CgogICAgc3RhY2s8aW50PiBzMSxzMixzMyxzNDsKCiAgICBzMS5wdXNoKDApOwogICAgczIucHVzaCgwKTsKICAgIHMzLnB1c2goMCk7CiAgICBzNC5wdXNoKDApOwoKICAgIGludCBiMSA9IDAsYjIgPSAwLGIzID0gMCxiNCA9IDA7CgogICAgZm9yKGludCBpPTE7c3RyW2ldIT0nXDAnO2krKykKICAgIHsKICAgICAgICBpbnQgbGFzdF9pZHggPSAwOwoKICAgICAgICBpZihzdHJbaV09PScoJ3x8c3RyW2ldPT0nPCd8fHN0cltpXT09J1snfHxzdHJbaV09PSd7JykKICAgICAgICB7CiAgICAgICAgaWYoc3RyW2ldPT0nKCcpCiAgICAgICAgICAgIHMxLnB1c2goaSk7CiAgICAgICAgZWxzZSBpZihzdHJbaV0gPT0gJ1snKQogICAgICAgICAgICBzMi5wdXNoKGkpOwogICAgICAgIGVsc2UgaWYoc3RyW2ldPT0neycpCiAgICAgICAgICAgIHMzLnB1c2goaSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBzNC5wdXNoKGkpOwogICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgaWYoc3RyW2ldPT0nKScpCiAgICAgICAgewogICAgICAgICAgICBsYXN0X2lkeCA9IHMxLnRvcCgpOwogICAgICAgICAgICBzMS5wb3AoKTsKICAgICAgICAgICAgaWYoczEuZW1wdHkoKSkKICAgICAgICAgICAgICAgIHMxLnB1c2goMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoc3RyW2ldID09ICddJyl7CiAgICAgICAgICAgIGxhc3RfaWR4ID0gczIudG9wKCk7CgogICAgICAgICAgICBzMi5wb3AoKTsKICAgICAgICAgICAgaWYoczIuZW1wdHkoKSkKICAgICAgICAgICAgICAgIHMyLnB1c2goMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoc3RyW2ldPT0nfScpCiAgICAgICAgewogICAgICAgICAgbGFzdF9pZHggPSBzMy50b3AoKTsKICAgICAgICAgIHMzLnBvcCgpOwogICAgICAgICAgICBpZihzMy5lbXB0eSgpKQogICAgICAgICAgICAgICAgczMucHVzaCgwKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgbGFzdF9pZHggPSBzNC50b3AoKTsKICAgICAgICAgICAgczQucG9wKCk7CiAgICAgICAgICAgIGlmKHM0LmVtcHR5KCkpCiAgICAgICAgICAgICAgICBzNC5wdXNoKDApOwogICAgICAgIH0KCiAgICAgICAgc3RyTm9kZSB4eCA9IHNxdWVyeSgxLDAsTi0xLGxhc3RfaWR4LGkpOwogICAgICAgIGlmKHh4LnN1bTE9PTAmJnh4Lm1pbnN1bTE9PTAmJnh4LnN1bTI9PTAmJnh4Lm1pbnN1bTI9PTAmJnh4LnN1bTM9PTAmJnh4Lm1pbnN1bTM9PTAmJnh4LnN1bTQ9PTAmJnh4Lm1pbnN1bTQ9PTApCiAgICAgICAgICAgIGNvdW50ID0gbWF4KGNvdW50LHF1ZXJ5KDEsMCxOLTEsbGFzdF9pZHgsaSkpOwogICAgfQogICAgcHJpbnRmKCIlbGxkXG4iLGNvdW50KTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==