#include <bits/stdc++.h>
using namespace std;
const int64_t MOD = 1e9 + 7;
void add(int64_t& a, int64_t b) { a = (a + b) % MOD; }
void mul(int64_t& a, int64_t b) { a = a * b % MOD; }
vector<int64_t> fact, seq_inv, fact_inv;
void create_fact_mod(int num) {
  fact[0] = 1;
  fact[1] = 1;
  for (int i = 2; i <= num; i++) {
    fact[i] = fact[i - 1] * i % MOD;
  }
}
void create_seq_inv_mod(int num) {
  seq_inv[0] = 1;
  seq_inv[1] = 1;
  for (int i = 2; i <= num; i++) {
    seq_inv[i] = (MOD - MOD / i) * seq_inv[MOD % i] % MOD;
  }
}
void create_fact_inv_mod(int num) {
  fact_inv[0] = 1;
  fact_inv[1] = 1;
  for (int i = 2; i <= num; i++) {
    fact_inv[i] = fact_inv[i - 1] * seq_inv[i] % MOD;
  }
}
void create_mod_tables(int num) {
  fact.resize(num + 1);
  seq_inv.resize(num + 1);
  fact_inv.resize(num + 1);
  create_fact_mod(num);
  create_seq_inv_mod(num);
  create_fact_inv_mod(num);
}
int64_t extgcd(int64_t a, int64_t b, int64_t& x, int64_t& y) {
  int64_t d = a;
  if (b != 0) {
    d = extgcd(b, a % b, y, x);
    y -= (a / b) * x;
  } else {
    x = 1;
    y = 0;
  }
  return d;
}
int64_t inv_mod(int64_t a) {
  int64_t x, y;
  extgcd(a, MOD, x, y);
  return (MOD + x % MOD) % MOD;
}
int main() {
  string S;
  cin >> S;
  int N = S.size();
  create_mod_tables(N);
  map<char, int> mp;
  for (char c : S) mp[c]++;
  int K = mp.size();
  map<char, int> c2i;
  vector<int> nums;
  int64_t C = fact[N / 2] * fact[N / 2] % MOD;
  for (auto& p : mp) {
    c2i[p.first] = nums.size();
    nums.push_back(p.second);
    mul(C, fact_inv[p.second]);
  }
  static int64_t dp[100001];
  dp[0] = C;
  int sum = 0;
  for (int i = 0; i < K; i++) {
    for (int j = sum; j >= 0; j--) add(dp[j + nums[i]], dp[j]);
    sum += nums[i];
  }
  int64_t ans[52][52], dp2[100001];
  for (int a = 0; a < K; a++) {
    ans[a][a] = dp[N / 2];
    for (int b = 0; b < a; b++) {
      if (nums[a] + nums[b] > N / 2) {
        ans[a][b] = ans[b][a] = 0;
      } else {
        for (int j = 0; j <= N / 2; j++) dp2[j] = dp[j];
        for (int n : {nums[a], nums[b]}) {
          for (int j = n; j <= N / 2; j++) add(dp2[j], MOD - dp2[j - n]);
        }
        ans[a][b] = ans[b][a] =
            (dp2[N / 2] + dp2[N / 2 - nums[a] - nums[b]]) % MOD;
      }
    }
  }
  int Q;
  cin >> Q;
  while (Q--) {
    int x, y;
    scanf("%d %d", &x, &y);
    int a = c2i[S[x - 1]], b = c2i[S[y - 1]];
    printf("%lld\n", ans[a][b]);
  }
  return 0;
}
