#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
const int mod = 1e9 + 7;
int dp[N], f[N], t[52], ans[52][52];
int fac[N], ifac[N], inv[N];
char s[N];
int n, q;
void init() {
  fac[0] = ifac[0] = inv[0] = 1;
  fac[1] = ifac[1] = inv[1] = 1;
  for (int i = 2; i < N; i++) {
    fac[i] = fac[i - 1] * (long long)i % mod;
    inv[i] = (mod - mod / i) * (long long)inv[mod % i] % mod;
    ifac[i] = ifac[i - 1] * (long long)inv[i] % mod;
  }
}
int get_id(char s) {
  if (s >= 'A' && s <= 'Z') return s - 'A' + 26;
  return s = s - 'a';
}
int main() {
  init();
  long long res = 1;
  scanf("%s%d", s, &q);
  for (int i = 0; s[i]; i++) t[get_id(s[i])]++;
  for (int i = 0; i < 52; i++) res = res * ifac[t[i]] % mod;
  n = strlen(s) / 2;
  dp[0] = 1;
  res = res * fac[n] % mod * fac[n] % mod;
  for (int i = 0; i < 52; i++) {
    if (!t[i]) continue;
    for (int j = n; j >= t[i]; j--) dp[j] = (dp[j] + dp[j - t[i]]) % mod;
  }
  for (int i = 0; i < 52; i++) {
    ans[i][i] = dp[n];
    if (!t[i]) continue;
    for (int j = 0; j <= n; j++) f[j] = dp[j];
    for (int j = t[i]; j <= n; j++) f[j] = (f[j] - f[j - t[i]] + mod) % mod;
    for (int j = i + 1; j < 52; j++) {
      if (!t[j]) continue;
      for (int k = t[j]; k <= n; k++) f[k] = (f[k] - f[k - t[j]] + mod) % mod;
      ans[i][j] = ans[j][i] = 2LL * f[n] % mod;
      for (int k = n; k >= t[j]; k--) f[k] = (f[k] + f[k - t[j]]) % mod;
    }
  }
  while (q--) {
    int x, y;
    scanf("%d%d", &x, &y);
    x = get_id(s[x - 1]);
    y = get_id(s[y - 1]);
    printf("%lld\n", ans[x][y] * res % mod);
  }
  return 0;
}
