#include <bits/stdc++.h>
const double eps = (1e-9);
using namespace std;
int dcmp(long double a, long double b) {
  return fabsl(a - b) <= eps ? 0 : (a > b) ? 1 : -1;
}
int getBit(int num, int idx) { return ((num >> idx) & 1) == 1; }
int setBit1(int num, int idx) { return num | (1 << idx); }
long long setBit0(long long num, int idx) { return num & ~(1ll << idx); }
long long flipBit(int num, int idx) { return num ^ (1 << idx); }
void FS() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
const int N = 100009;
const long long mod = 1e9 + 7;
string st;
long long f[N], n;
long long dp[N], cnt[60], a[N], ans[60][60], dp2[N];
long long power(long long b, long long p) {
  if (p == 0) return 1;
  if (p & 1) {
    return (b % mod * power((b % mod * (b % mod)) % mod, p / 2)) % mod;
  } else
    return power((b % mod * (b % mod)) % mod, p / 2);
}
void fact() {
  f[0] = 1;
  for (int i = 1; i <= 100000; i++) f[i] = (f[i - 1] * i) % mod;
}
void build_dp() {
  dp[0] = 1;
  for (int i = 1; i <= 52; i++) {
    if (cnt[i] == 0) continue;
    for (int j = n / 2; j >= cnt[i]; j--) {
      dp[j] = (dp[j] + dp[j - cnt[i]]) % mod;
    }
  }
}
void build_qans() {
  for (int i = 1; i <= 52; i++) {
    if (cnt[i] == 0) continue;
    for (int k = 0; k <= n / 2; k++) dp2[k] = dp[k];
    for (int k = cnt[i]; k <= n / 2; k++)
      dp2[k] = ((dp2[k] - dp2[k - cnt[i]]) + mod) % mod;
    ans[i][i] = dp2[n / 2];
    for (int j = i + 1; j <= 52; j++) {
      if (cnt[j] == 0) continue;
      for (int k = cnt[j]; k <= n / 2; k++)
        dp2[k] = ((dp2[k] - dp2[k - cnt[j]]) + mod) % mod;
      ans[i][j] = dp2[n / 2];
      for (int k = n / 2; k >= cnt[j]; k--)
        dp2[k] = (dp2[k] + dp2[k - cnt[j]] + mod) % mod;
    }
  }
}
int main() {
  FS();
  cin >> st;
  n = ((int)(st).size());
  for (int i = 0; i < ((int)(st).size()); i++) {
    int ch = 0;
    if (isupper(st[i]) == 1)
      ch = (st[i] - 'A' + 1) + 26;
    else
      ch = (st[i] - 'a' + 1);
    cnt[ch]++;
    a[i + 1] = ch;
  }
  fact();
  long long sum = 1;
  sum = (sum * f[n / 2]) % mod;
  sum = (sum * f[n / 2]) % mod;
  for (int i = 1; i <= 52; i++) {
    if (cnt[i] == 0) continue;
    sum = (sum * (power(f[cnt[i]], mod - 2))) % mod;
  }
  build_dp();
  build_qans();
  int q;
  cin >> q;
  while (q--) {
    int x, y;
    cin >> x >> y;
    x = a[x];
    y = a[y];
    if (x > y) swap(x, y);
    cout << ((sum * ans[x][y]) % mod * 2) % mod << endl;
  }
}
