#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
const long long int mod = 1e9 + 7;
const long long int limit = 1e5 + 9;
long long int inv[maxn], num[100], dp[maxn], len, temp[maxn], fac[maxn],
    cnt[100][100];
char s[maxn];
long long int qpow(long long int x, long long int k) {
  long long int res = 1;
  while (k) {
    if (k & 1) res = (res * x) % mod;
    x = (x * x) % mod;
    k /= 2;
  }
  return res;
}
void init() {
  memset(dp, 0, sizeof(dp));
  dp[0] = 1;
  fac[1] = 1;
  for (int i = 2; i <= limit; i++) fac[i] = (fac[i - 1] * i) % mod;
  inv[limit] = qpow(fac[limit], mod - 2);
  for (long long int i = limit - 1; i >= 0; i--)
    inv[i] = (inv[i + 1] * (i + 1)) % mod;
  for (int i = 1; i < 100; i++) {
    if (!num[i]) continue;
    for (int j = len; j >= num[i]; j--) {
      dp[j] = (dp[j] + dp[j - num[i]]) % mod;
    }
  }
}
int get(char c) {
  if (c >= 'a')
    return c - 'a' + 27;
  else
    return c - 'A' + 1;
}
int main() {
  long long int ans;
  scanf("%s", s + 1);
  len = 0;
  memset(num, 0, sizeof(num));
  for (int i = 1; s[i]; i++) {
    len++;
    if (s[i] >= 'a')
      num[s[i] - 'a' + 27]++;
    else
      num[s[i] - 'A' + 1]++;
  }
  init();
  ans = 1;
  ans = (fac[len / 2] * fac[len / 2]) % mod;
  for (int i = 1; i < 100; i++) {
    if (num[i]) ans = (ans * inv[num[i]]) % mod;
  }
  int x, y;
  for (int p1 = 1; p1 < 100; p1++) {
    if (!num[p1]) continue;
    for (int p2 = p1 + 1; p2 < 100; p2++) {
      if (!num[p2]) continue;
      x = p1;
      y = p2;
      for (int j = 0; j <= len / 2; j++) {
        if (j < num[x])
          temp[j] = dp[j];
        else {
          temp[j] = (dp[j] - temp[j - num[x]] + mod) % mod;
        }
      }
      for (int j = num[y]; j <= len / 2; j++) {
        temp[j] = (temp[j] - temp[j - num[y]] + mod) % mod;
      }
      cnt[x][y] = cnt[y][x] = temp[len / 2];
    }
  }
  int q;
  scanf("%d", &q);
  while (q--) {
    scanf("%d%d", &x, &y);
    if (s[x] == s[y]) {
      printf("%lld\n", (ans * dp[len / 2]) % mod);
      continue;
    }
    x = get(s[x]);
    y = get(s[y]);
    printf("%lld\n", ((ans * cnt[x][y]) % mod * 2) % mod);
  }
  return 0;
}
