#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
const int N=1e6;
#define ls p*2
#define rs p*2+1
char st[N+5];
int q,n;
struct node {
int l,r,ans;
} T[4*N+5];
node merge(node x,node y) {
node ret;
ret.ans=x.ans+y.ans+2*min(x.r,y.l);
ret.l=x.l+y.l-min(x.r,y.l);
ret.r=x.r+y.r-min(x.r,y.l);
return ret;
}
void build(int p,int l,int r) {
if(l==r) {
if(st[l]=='(') T[p].r++;
else T[p].l++;
return;
}
int mid=(l+r)/2;
build(ls,l,mid);build(rs,mid+1,r);
T[p]=merge(T[ls],T[rs]);
}
node query(int p,int l,int r,int x,int y) {
if(x<=l&&r<=y) return T[p];
int mid=(l+r)/2;node a=(node){0,0,0},b=(node){0,0,0};
if(x<=mid) a=query(ls,l,mid,x,y);
if(y>mid) b=query(rs,mid+1,r,x,y);
return merge(a,b);
}
void solve() {
scanf("%s",st+1);n=strlen(st+1);
build(1,1,n);
scanf("%d",&q);
while(q--) {
int l,r;
scanf("%d %d",&l,&r);
printf("%d\n",query(1,1,n,l,r).ans);
}
}
int main() {
int t=1;scanf("%d",&t);
while(t--) solve();
}