#include <bits/stdc++.h>
using namespace std;
const long long oo = 1ll << 17;
const long long mos = 0x7FFFFFFF;
const long long nmos = 0x80000000;
const int inf = 0x3f3f3f3f;
const long long inff = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double esp = 1e-8;
const double PI = acos(-1.0);
const double PHI = 0.61803399;
const double tPHI = 0.38196601;
template <typename T>
inline T read(T& x) {
  x = 0;
  int f = 0;
  char ch = getchar();
  while (ch < '0' || ch > '9') f |= (ch == '-'), ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return x = f ? -x : x;
}
const int maxn = 1e5 + 9;
long long fac[maxn], inv[maxn];
long long cnt[100];
char str[maxn];
int cal(char a) {
  if (a >= 'a' && a <= 'z')
    return a - 'a' + 1;
  else
    return a - 'A' + 27;
}
long long ksm(long long a, long long n) {
  long long res = 1;
  while (n > 0) {
    if (n & 1) res = res * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return res;
}
long long dp[maxn], tmp[maxn], res[100][100];
int main() {
  scanf("%s", str);
  fac[0] = 1;
  for (int i = 1; i < maxn; i++) fac[i] = 1ll * fac[i - 1] * i % mod;
  int len = strlen(str);
  for (int i = 0; i < len; i++) {
    cnt[cal(str[i])]++;
  }
  long long M = 1;
  M = M * fac[len / 2] * fac[len / 2] % mod;
  for (int i = 1; i <= 52; i++) {
    if (cnt[i] != 0) M = M * ksm(fac[cnt[i]], mod - 2) % mod;
  }
  dp[0] = 1;
  for (int i = 1; i <= 52; i++) {
    if (cnt[i] == 0) continue;
    for (int j = len; j >= cnt[i]; j--) {
      dp[j] = (dp[j] + dp[j - cnt[i]]) % mod;
    }
  }
  for (int x = 1; x <= 52; x++) res[x][x] = dp[len / 2] * M % mod;
  for (int x = 1; x <= 52; x++) {
    if (cnt[x] == 0) continue;
    for (int y = x + 1; y <= 52; y++) {
      if (cnt[x] == 0 || cnt[y] == 0) continue;
      for (int i = 0; i <= len / 2; i++) tmp[i] = dp[i];
      for (int j = cnt[x]; j <= len / 2; j++) {
        tmp[j] = ((tmp[j] - tmp[j - cnt[x]]) % mod + mod) % mod;
      }
      for (int j = cnt[y]; j <= len / 2; j++) {
        tmp[j] = ((tmp[j] - tmp[j - cnt[y]]) % mod + mod) % mod;
      }
      res[x][y] = 2ll * tmp[len / 2] % mod * M % mod;
      res[y][x] = res[x][y];
    }
  }
  int q;
  scanf("%d", &q);
  while (q--) {
    int x, y;
    scanf("%d%d", &x, &y);
    x--, y--;
    int l = cal(str[x]), r = cal(str[y]);
    printf("%lld\n", res[l][r]);
  }
  return 0;
}
