#include <bits/stdc++.h>
using namespace std;
struct Item {
  int a, b, c;
};
const int MAX = (int)1e6 + 10;
int n;
string s;
int q;
Item T[2 * MAX];
Item zero;
void init() {
  cin >> s;
  n = s.size();
  cin >> q;
  for (int i = 1; i <= n; i++) {
    T[i + n - 1].a = 0;
    T[i + n - 1].b = (s[i - 1] == '(');
    T[i + n - 1].c = (s[i - 1] == ')');
  }
  zero.a = zero.b = zero.c = 0;
}
Item combine(const Item& l, const Item& r) {
  Item newItem;
  int x = min(l.b, r.c);
  newItem.a = l.a + r.a + x;
  newItem.b = l.b + r.b - x;
  newItem.c = l.c + r.c - x;
  return newItem;
}
void build() {
  for (int i = n - 1; i >= 1; i--) T[i] = combine(T[i << 1], T[i << 1 | 1]);
}
Item query(int l, int r) {
  Item resl = zero, resr = zero;
  for (l += n - 1, r += n; l < r; l >>= 1, r >>= 1) {
    if (l & 1) resl = combine(resl, T[l++]);
    if (r & 1) resr = combine(T[--r], resr);
  }
  return combine(resl, resr);
}
void process() {
  build();
  for (int i = 1; i <= q; i++) {
    int l, r;
    cin >> l >> r;
    Item res = query(l, r);
    cout << res.a * 2 << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  init();
  process();
}
