#include <bits/stdc++.h>
using namespace std;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
int dx8[] = {0, 0, 1, 1, 1, -1, -1, -1};
int dy8[] = {1, -1, -1, 0, 1, -1, 0, 1};
string s;
int n;
struct data {
  long long l, r, ans;
};
data sum[40 * 100005];
void build(long long l, long long r, long long k) {
  if (l == r) {
    if (s[l - 1] == ')')
      sum[k].r = 1;
    else
      sum[k].l = 1;
    return;
  }
  long long mid = (l + r) / 2;
  build(l, mid, k * 2);
  build(mid + 1, r, k * 2 + 1);
  sum[k].ans = 2 * min(sum[k * 2].l, sum[k * 2 + 1].r) + sum[k * 2].ans +
               sum[k * 2 + 1].ans;
  sum[k].l =
      sum[k * 2].l - min(sum[k * 2].l, sum[k * 2 + 1].r) + sum[k * 2 + 1].l;
  sum[k].r =
      sum[k * 2 + 1].r - min(sum[k * 2].l, sum[k * 2 + 1].r) + sum[k * 2].r;
}
data pp;
data query(long long l, long long r, long long k, long long L, long long R) {
  if (l > R || r < L) return pp;
  if (l >= L && r <= R) return sum[k];
  long long mid = (l + r) / 2;
  data p, q, res;
  p = query(l, mid, k * 2, L, R);
  q = query(mid + 1, r, k * 2 + 1, L, R);
  res.ans = 2 * min(p.l, q.r) + p.ans + q.ans;
  res.l = p.l - min(p.l, q.r) + q.l;
  res.r = q.r - min(p.l, q.r) + p.r;
  return res;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> s;
  n = s.size();
  build(1, n, 1);
  int q, l, r;
  cin >> q;
  while (q--) {
    cin >> l >> r;
    data d = query(1, n, 1, l, r);
    cout << d.ans << endl;
  }
  return 0;
}
