# include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair < int, int > pii;

const int inf = (int)1e9 + 7;
const int N = (int)2e5 + 7;

string s;
int p[N][26];
int f[N], rf[N];

int bpow(int x, int y){
  if(!y){
    return 1;
  }
  if(y & 1){
    return bpow(x, y - 1) * 1ll * x % inf;
  }
  int z = bpow(x, y >> 1);
  return z * 1ll * z % inf;
}

int main(){
  cin >> s;
  int n = (int)s.size();
  f[0] = 1;
  for(int i = 1; i <= n; ++i){
    f[i] = f[i - 1] * 1ll * i % inf;
  }
  rf[n] = bpow(f[n], inf - 2);
  for(int i = n - 1; i >= 0; --i){
    rf[i] = rf[i + 1] * 1ll * (i + 1) % inf;
  }
  for(int i = 0; i < (int)s.size(); ++i){
    p[i + 1][s[i] - 'a']++;
    for(int j = 0; j < 26; ++j){
      p[i + 1][j] += p[i][j];
    }
  }
  int q;
  cin >> q;
  for(int i = 1; i <= q; ++i){
    int l, r;
    cin >> l >> r;
    int sum = 0, odd = 0;
    int dv = 1;
    for(int j = 0; j < 26; ++j){
      int cnt = p[r][j] - p[l - 1][j];
      sum += cnt / 2;
      odd += (cnt % 2 == 1);
      dv = dv * 1ll * rf[cnt / 2] % inf;
    }
    if(!odd){
      int ans = f[sum];
      ans = ans * 1ll * dv % inf;
      printf("%d\n", ans);
      continue;
    }
    int ans = f[sum];
    ans = ans * 1ll * dv % inf;
    ans = ans * 1ll * odd % inf;
    printf("%d\n", ans);
  }
  return 0;
}