#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
const int mod = 1e9 + 7;
char s[maxn];
int g1[maxn], g2[maxn], dp[55][55];
int f[maxn], num[55], jc[maxn], inv[maxn];
int qp(int x, int y) {
  int res = 1;
  while (y) {
    if (y & 1) res = (long long)res * x % mod;
    y >>= 1;
    x = (long long)x * x % mod;
  }
  return res;
}
void pre(int n) {
  jc[0] = 1;
  for (int i = 1; i <= n; i++) jc[i] = (long long)jc[i - 1] * i % mod;
  inv[n] = qp(jc[n], mod - 2);
  for (int i = n; i > 0; i--) inv[i - 1] = (long long)inv[i] * i % mod;
}
int idx(char c) {
  if (c >= 'a' && c <= 'z') return c - 'a' + 1;
  return c - 'A' + 27;
}
int main() {
  scanf("%s", s + 1);
  int n = strlen(s + 1);
  pre(n);
  for (int i = 1; i <= n; i++) num[idx(s[i])]++;
  f[0] = 1;
  int ans = (long long)jc[n / 2] * jc[n / 2] % mod;
  for (int i = 1; i <= 52; i++) {
    if (!num[i]) continue;
    for (int j = n; j >= num[i]; j--) {
      f[j] = ((long long)f[j] + f[j - num[i]]) % mod;
    }
    if (num[i]) ans = (long long)ans * inv[num[i]] % mod;
  }
  for (int i = 1; i <= 52; i++) {
    if (!num[i]) continue;
    dp[i][i] = f[n / 2];
    memcpy(g1, f, sizeof(f));
    for (int j = num[i]; j <= n / 2; j++) {
      g1[j] = ((long long)f[j] - g1[j - num[i]] + mod) % mod;
    }
    for (int j = i + 1; j <= 52; j++) {
      if (!num[j]) continue;
      memcpy(g2, g1, sizeof(g1));
      for (int k = num[j]; k <= n / 2; k++) {
        g2[k] = ((long long)g1[k] - g2[k - num[j]] + mod) % mod;
      }
      dp[i][j] = dp[j][i] = 2ll * g2[n / 2] % mod;
    }
  }
  int m, x, y;
  scanf("%d", &m);
  while (m--) {
    scanf("%d%d", &x, &y);
    x = idx(s[x]);
    y = idx(s[y]);
    printf("%lld\n", (long long)ans * dp[x][y] % mod);
  }
  return 0;
}
