#include <bits/stdc++.h>
using namespace std;
template <class _Tp>
void ckmax(_Tp &a, _Tp b) {
  if (a < b) a = b;
}
template <class _Tp>
void ckmin(_Tp &a, _Tp b) {
  if (a > b) a = b;
}
template <class _Tp>
_Tp gcd(_Tp a, _Tp b) {
  return (b == 0) ? (a) : (gcd(b, a % b));
}
int read() {
  char ch = getchar();
  bool f = 1;
  int x = 0;
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') f = 0, ch = getchar();
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + (ch & 15);
    ch = getchar();
  }
  return f ? x : -x;
}
const int inf = 1000000000;
const long long Inf = 1000000000000000000ll;
const long long mod = 1000000007;
long long dp[100050], f[100050], g[100050], h[100050], ans[100][100],
    fac[100050], finv[100050];
int n, q, a[100050], p[100050], id[100050], cnt;
char s[100050];
long long qpow(long long b, long long p) {
  long long res = 1;
  while (p) {
    if (p & 1ll) res = res * b % mod;
    b = b * b % mod;
    p >>= 1ll;
  }
  return res;
}
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  fac[0] = finv[0] = 1;
  for (int i = 1; i <= n; ++i) {
    fac[i] = fac[i - 1] * i % mod;
    finv[i] = qpow(fac[i], mod - 2);
  }
  for (int i = 1; i <= n; ++i) {
    if (id[s[i]] == 0) id[s[i]] = ++cnt;
    a[i] = id[s[i]];
  }
  for (int i = 1; i <= n; ++i) p[a[i]]++;
  dp[0] = 1;
  long long v = fac[n / 2] * fac[n / 2] % mod;
  for (int i = 1; i <= cnt; ++i) v = (v * finv[p[i]]) % mod;
  for (int i = 1; i <= cnt; ++i)
    for (int j = n; j >= p[i]; --j) dp[j] = (dp[j] + dp[j - p[i]]) % mod;
  for (int i = 1; i <= cnt; ++i)
    for (int j = i + 1; j <= cnt; ++j)
      if (p[i] + p[j] <= n / 2) {
        memset(f, 0, sizeof(f));
        memset(g, 0, sizeof(g));
        for (int k = 0; k <= n; ++k) h[k] = dp[k];
        for (int k = n - p[i]; k >= 0; --k) {
          f[k] = h[k + p[i]];
          h[k] = (h[k] + mod - f[k]) % mod;
        }
        for (int k = n - p[i] - p[j]; k >= 0; --k) {
          g[k] = f[k + p[j]];
          f[k] = (f[k] + mod - g[k]) % mod;
        }
        ans[i][j] = g[n / 2 - p[i] - p[j]];
      }
  for (int i = 1; i <= cnt; ++i)
    for (int j = 1; j < i; ++j) ans[i][j] = ans[j][i];
  q = read();
  while (q--) {
    int x = read(), y = read();
    if (a[x] == a[y])
      printf("%lld\n", dp[n / 2] * v % mod);
    else
      printf("%lld\n", ans[a[x]][a[y]] * v * 2ll % mod);
  }
  return 0;
}
