#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int maxn = 1e5 + 9;
long long rd() {
  long long ans = 0;
  char last = ' ', ch = getchar();
  while (!(ch >= '0' && ch <= '9')) last = ch, ch = getchar();
  while (ch >= '0' && ch <= '9') ans = ans * 10 + ch - '0', ch = getchar();
  if (last == '-') ans = -ans;
  return ans;
}
long long Pow(long long a, long long b, long long mod) {
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return res;
}
long long fac[maxn], ifac[maxn];
char x[maxn];
int ct[100];
int id(char c) {
  if (islower(c)) return c - 'a';
  return c - 'A' + 26;
}
long long dp[52][maxn / 2];
long long ans[52][52];
long long tmp[maxn / 2];
int main() {
  fac[0] = 1;
  for (int i = (int)(1); i <= (int)(maxn - 1); i++)
    fac[i] = fac[i - 1] * i % mod;
  ifac[maxn - 1] = Pow(fac[maxn - 1], mod - 2, mod);
  for (int i = (int)(maxn - 2); i >= (int)(0); i--)
    ifac[i] = ifac[i + 1] * (i + 1) % mod;
  gets(x + 1);
  int len = strlen(x + 1);
  for (int i = (int)(1); i <= (int)(len); i++) {
    ct[id(x[i])]++;
  }
  for (int i = (int)(0); i <= (int)(51); i++) dp[i][0] = 1;
  for (int i = (int)(0); i <= (int)(51); i++) {
    if (!ct[i]) continue;
    for (int j = (int)(0); j <= (int)(51); j++) {
      if (i == j || !ct[j]) continue;
      for (int k = (int)(len / 2); k >= (int)(ct[i]); k--) {
        dp[j][k] = (dp[j][k] + dp[j][k - ct[i]]) % mod;
      }
    }
  }
  for (int i = (int)(0); i <= (int)(51); i++)
    if (ct[i] && ct[i] <= len / 2) ans[i][i] = dp[i][len / 2 - ct[i]];
  for (int i = (int)(0); i <= (int)(50); i++) {
    if (ct[i] == 0) continue;
    for (int j = (int)(i + 1); j <= (int)(51); j++) {
      if (ct[j] == 0) continue;
      if (ct[i] + ct[j] > len / 2) continue;
      if (i == 2 && j == 3) {
        i = 2;
      }
      for (int k = (int)(0); k <= (int)(len / 2); k++) tmp[k] = dp[i][k];
      for (int k = (int)(ct[j]); k <= (int)(len / 2); k++) {
        tmp[k] = (tmp[k] + mod - tmp[k - ct[j]]) % mod;
      }
      ans[i][j] = tmp[len / 2 - ct[i] - ct[j]];
    }
  }
  int t = rd();
  long long mul = 2ll * fac[len / 2] * fac[len / 2] % mod;
  for (int i = (int)(0); i <= (int)(51); i++) {
    mul = mul * ifac[ct[i]] % mod;
  }
  while (t--) {
    int l = rd(), r = rd();
    l = id(x[l]), r = id(x[r]);
    if (l > r) swap(l, r);
    printf("%lld\n", ans[l][r] * mul % mod);
  }
  return 0;
}
