#include <bits/stdc++.h>

std::vector<int> preInverse(int n, int md) {
  std::vector<int> inv(n + 1);
  inv[1] = 1;
  for (int i = 2; i <= n; ++i) {
    inv[i] = (long long)(md - md / i) * inv[md % i] % md;
  }
  return inv;
}

struct Binomial {
  int n, md;
  std::vector<int> factorial, inv_factorial;
  Binomial(int n, int mod) : n(n), md(mod) {
    factorial.resize(n + 1);
    inv_factorial = preInverse(n, md);
    factorial[0] = inv_factorial[0] = 1;
    for (int i = 1; i <= n; i++) {
      factorial[i] = (long long)factorial[i - 1] * i % md;
      inv_factorial[i] = (long long)inv_factorial[i - 1] * inv_factorial[i] % md;
    }
  }
  int choose(int n, int k) {
    if (k > n) return 0;
    return (long long)factorial[n] * inv_factorial[k] % md * inv_factorial[n - k] % md;
  }
};

using namespace std;

const int mod = 1e9 + 7;

int main(int argc, char *argv[]) {
  string s;
  cin >> s;
  vector<vector<int>> a(s.size() + 1, vector<int>(26));
  for (int i = 1; i <= s.size(); i++) {
    a[i] = a[i - 1];
    a[i][s[i - 1] - 'a']++;
  }
  Binomial bn(1e5 + 5, mod);
  int Q;
  cin >> Q;
  while (Q--) {
    int l, r;
    cin >> l >> r;
    vector<int> cnt(26);
    int y = 0, S = 0;
    for (int i = 0; i < 26; i++) {
      cnt[i] = a[r][i] - a[l - 1][i];
      S += cnt[i] / 2;
      if (cnt[i] & 1) y++;
    }
    long long ans = (y ? y : 1);
    for (int i = 0; i < 26; i++) {
      ans = ans * bn.choose(S, cnt[i] / 2) % mod;
      S -= cnt[i] / 2;
    }
    cout << ans << endl;
  }
  return 0;
}