#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
const int inf = 0x3f3f3f3f;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1000000007;
const double eps = 1e-6;
const double PI = acos(-1);
int n, m, q, way, c[52];
int dp[N], f[N], g[N], ans[52][52];
char s[N];
int F[N], Finv[N], inv[N];
int getPos(char x) {
  if (islower(x))
    return x - 'a';
  else
    return x - 'A' + 26;
}
void add(int &a, int b) {
  a += b;
  if (a >= mod) a -= mod;
}
void init() {
  inv[1] = F[0] = Finv[0] = 1;
  for (int i = 2; i < N; i++)
    inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;
  for (int i = 1; i < N; i++) F[i] = 1ll * F[i - 1] * i % mod;
  for (int i = 1; i < N; i++) Finv[i] = 1ll * Finv[i - 1] * inv[i] % mod;
}
int main() {
  init();
  scanf("%s", s + 1);
  n = strlen(s + 1);
  for (int i = 1; i <= n; i++) c[getPos(s[i])]++;
  m = n / 2;
  way = 1ll * F[m] * F[m] % mod;
  for (int i = 0; i < 52; i++) way = 1ll * way * Finv[c[i]] % mod;
  dp[0] = 1;
  for (int i = 0; i < 52; i++) {
    if (!c[i]) continue;
    for (int j = n - c[i]; j >= 0; j--) add(dp[j + c[i]], dp[j]);
  }
  for (int u = 0; u < 52; u++) {
    for (int v = u + 1; v < 52; v++) {
      if (!c[u] || !c[v]) continue;
      for (int i = 0; i <= n; i++) {
        if (i < c[u])
          f[i] = dp[i];
        else {
          f[i] = dp[i] - f[i - c[u]];
          if (f[i] < 0) f[i] += mod;
        }
        if (i < c[v])
          g[i] = f[i];
        else {
          g[i] = f[i] - g[i - c[v]];
          if (g[i] < 0) g[i] += mod;
        }
      }
      ans[u][v] = 2 * g[m] % mod;
    }
  }
  scanf("%d", &q);
  while (q--) {
    int x, y;
    scanf("%d%d", &x, &y);
    x = getPos(s[x]), y = getPos(s[y]);
    if (x > y) swap(x, y);
    if (x == y) {
      printf("%d\n", 1ll * dp[m] * way % mod);
    } else {
      printf("%d\n", 1ll * ans[x][y] * way % mod);
    }
  }
  return 0;
}
