#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <int, int> ii;
const ll LINF = 1e18;
const int INF = 1e9;
const int N = 1e6 + 5;
struct node {
int ans = 0, rem_open = 0, rem_close = 0;
node() {}
node(int ans, int rem_open, int rem_close): ans(ans), rem_open(rem_open), rem_close(rem_close) {}
node(char bracket) {
if (bracket == '(') rem_open = 1;
if (bracket == ')') rem_close = 1;
}
node operator+(const node& other) {
node sum;
int bonus = min(rem_open, other.rem_close); // số cặp ngoặc đúng có thêm
sum.ans = ans + other.ans + bonus; // số cặp ngoặc đúng sau khi gộp
sum.rem_open = (rem_open - bonus) + other.rem_open; // số ngoặc mở còn thừa sau khi gộp
sum.rem_close = rem_close + (other.rem_close - bonus); // số ngoặc đóng còn thừa sau khi gộp
return sum;
}
};
int n, m;
string s;
node seg[4 * N];
void build(int id, int l, int r) {
if (l == r) {
seg[id] = node(s[l]);
return;
}
int mid = (l + r) >> 1;
build(id * 2, l, mid);
build(id * 2 + 1, mid + 1, r);
seg[id] = seg[id * 2] + seg[id * 2 + 1];
}
node get(int id, int l, int r, int u, int v) {
if (l > v || r < u) return node();
if (u <= l && r <= v) return seg[id];
int mid = (l + r) >> 1;
return get(id * 2, l, mid, u, v) + get(id * 2 + 1, mid + 1, r, u, v);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> s >> m;
n = s.size();
build(1, 0, n - 1);
for (int i = 0; i < m; i++) {
int l, r;
cin >> l >> r;
l--, r--;
cout << get(1, 0, n - 1, l, r).ans * 2 << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7IAp0eXBlZGVmIHBhaXIgPGludCwgaW50PiBpaTsgCgpjb25zdCBsbCBMSU5GID0gMWUxODsgCmNvbnN0IGludCBJTkYgPSAxZTk7CmNvbnN0IGludCBOID0gMWU2ICsgNTsgCgpzdHJ1Y3Qgbm9kZSB7CglpbnQgYW5zID0gMCwgcmVtX29wZW4gPSAwLCByZW1fY2xvc2UgPSAwOyAKCglub2RlKCkge30KCglub2RlKGludCBhbnMsIGludCByZW1fb3BlbiwgaW50IHJlbV9jbG9zZSk6IGFucyhhbnMpLCByZW1fb3BlbihyZW1fb3BlbiksIHJlbV9jbG9zZShyZW1fY2xvc2UpIHt9CgoJbm9kZShjaGFyIGJyYWNrZXQpIHsKCQlpZiAoYnJhY2tldCA9PSAnKCcpIHJlbV9vcGVuID0gMTsgIAoJCWlmIChicmFja2V0ID09ICcpJykgcmVtX2Nsb3NlID0gMTsgCgl9CgoJbm9kZSBvcGVyYXRvcisoY29uc3Qgbm9kZSYgb3RoZXIpIHsKCQlub2RlIHN1bTsgICAKCQlpbnQgYm9udXMgPSBtaW4ocmVtX29wZW4sIG90aGVyLnJlbV9jbG9zZSk7IC8vIHPhu5EgY+G6t3Agbmdv4bq3YyDEkcO6bmcgY8OzIHRow6ptIAoJCXN1bS5hbnMgPSBhbnMgKyBvdGhlci5hbnMgKyBib251czsgLy8gc+G7kSBj4bq3cCBuZ2/hurdjIMSRw7puZyBzYXUga2hpIGfhu5lwCgkJc3VtLnJlbV9vcGVuID0gKHJlbV9vcGVuIC0gYm9udXMpICsgb3RoZXIucmVtX29wZW47IC8vIHPhu5Egbmdv4bq3YyBt4bufIGPDsm4gdGjhu6thIHNhdSBraGkgZ+G7mXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgkJc3VtLnJlbV9jbG9zZSA9IHJlbV9jbG9zZSArIChvdGhlci5yZW1fY2xvc2UgLSBib251cyk7IC8vIHPhu5Egbmdv4bq3YyDEkcOzbmcgY8OybiB0aOG7q2Egc2F1IGtoaSBn4buZcAoJCXJldHVybiBzdW07IAoJfQp9OyAKCmludCBuLCBtOyAKc3RyaW5nIHM7IApub2RlIHNlZ1s0ICogTl07IAoKdm9pZCBidWlsZChpbnQgaWQsIGludCBsLCBpbnQgcikgewoJaWYgKGwgPT0gcikgewoJCXNlZ1tpZF0gPSBub2RlKHNbbF0pOyAKCQlyZXR1cm47IAoJfQoKCWludCBtaWQgPSAobCArIHIpID4+IDE7IAoJYnVpbGQoaWQgKiAyLCBsLCBtaWQpOyAKCWJ1aWxkKGlkICogMiArIDEsIG1pZCArIDEsIHIpOyAKCglzZWdbaWRdID0gc2VnW2lkICogMl0gKyBzZWdbaWQgKiAyICsgMV07IAp9Cgpub2RlIGdldChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2KSB7CglpZiAobCA+IHYgfHwgciA8IHUpIHJldHVybiBub2RlKCk7CgoJaWYgKHUgPD0gbCAmJiByIDw9IHYpIHJldHVybiBzZWdbaWRdOyAKCQoJaW50IG1pZCA9IChsICsgcikgPj4gMTsgIAoKCXJldHVybiBnZXQoaWQgKiAyLCBsLCBtaWQsIHUsIHYpICsgZ2V0KGlkICogMiArIDEsIG1pZCArIDEsIHIsIHUsIHYpOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgCgljaW4udGllKDApOyAKCWNpbiA+PiBzID4+IG07IAoJbiA9IHMuc2l6ZSgpOwoKCWJ1aWxkKDEsIDAsIG4gLSAxKTsgCgoJZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspIHsKCQlpbnQgbCwgcjsgCgkJY2luID4+IGwgPj4gcjsgCgkJCgkJbC0tLCByLS07IAoKCQljb3V0IDw8IGdldCgxLCAwLCBuIC0gMSwgbCwgcikuYW5zICogMiA8PCAnXG4nOyAKCX0KfQ==