#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-13;
const long double PI = acos(-1);
const int INF = (int)1e9;
const long long INFF = (long long)2e18;
const int mod = (int)1e9 + 7;
const int MXN = (int)1e5 + 7;
char s[MXN];
void init() { scanf("%s", s + 1); }
inline int sub(char ch) {
  if (ch >= 'a' && ch <= 'z')
    return ch - 'a';
  else
    return ch - 'A' + 26;
}
inline int add(int v1, int v2) {
  v1 += v2;
  if (v1 >= mod)
    return v1 - mod;
  else if (v1 < 0)
    return v1 + mod;
  return v1;
}
inline long long mypow(long long v, long long t) {
  long long res = 1;
  while (t) {
    if (t & 1) res = res * v % mod;
    t >>= 1;
    v = v * v % mod;
  }
  return res;
}
int cnt[57];
int dp[MXN];
int dp2[MXN];
long long fac[MXN], ifac[MXN];
int val[57][57];
void build() {
  int l = strlen(s + 1);
  fac[0] = ifac[0] = 1;
  for (int i = 1; i <= l; i++) fac[i] = fac[i - 1] * i % mod;
  ifac[l] = mypow(fac[l], mod - 2);
  for (int i = l - 1; i >= 1; i--) ifac[i] = ifac[i + 1] * (i + 1) % mod;
  for (int i = 1; i <= l; i++) {
    cnt[sub(s[i])]++;
  }
  dp[0] = 1;
  for (int i = 0; i < 52; i++) {
    if (!cnt[i]) continue;
    for (int j = l; j >= cnt[i]; j--) {
      dp[j] = add(dp[j], dp[j - cnt[i]]);
    }
  }
  long long v = fac[l / 2] * fac[l / 2] % mod;
  for (int i = 0; i < 52; i++) v = v * ifac[cnt[i]] % mod;
  for (int i = 0; i < 52; i++) val[i][i] = v * dp[l / 2] % mod;
  for (int i = 0; i < 52; i++) {
    if (!cnt[i]) continue;
    for (int j = 0; j <= l; j++) dp2[j] = dp[j];
    for (int j = cnt[i]; j <= l; j++) dp2[j] = add(dp2[j], -dp2[j - cnt[i]]);
    for (int j = i + 1; j < 52; j++) {
      if (!cnt[j]) continue;
      for (int k = cnt[j]; k <= l; k++) dp2[k] = add(dp2[k], -dp2[k - cnt[j]]);
      val[i][j] = 2 * dp2[l / 2] * v % mod;
      for (int k = l; k >= cnt[j]; k--) dp2[k] = add(dp2[k], dp2[k - cnt[j]]);
    }
  }
}
void solve() {
  int q;
  scanf("%d", &q);
  while (q--) {
    int x, y;
    scanf("%d %d", &x, &y);
    x = sub(s[x]);
    y = sub(s[y]);
    if (x > y) swap(x, y);
    printf("%d\n", val[x][y]);
  }
}
int main() {
  init();
  build();
  solve();
  return 0;
}
