#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1e5 + 5, MOD = 1e9 + 7;
int n, m;
int Arr[MAX_N];
int dp[MAX_N];
int ans[60][60];
int cnt[256];
string s;
int num[256];
int p = 1;
int F[MAX_N];
int Fdiv[MAX_N];
int _sum(int a, int b) {
  int c = a + b;
  if (MOD <= c) c -= MOD;
  return c;
}
int _mul(int a, int b) {
  int c = 1LL * a * b % MOD;
  return c;
}
int _pow(int a, int b) {
  if (!b) return 1;
  int res = _pow(a, b >> 1);
  res = _mul(res, res);
  if (b & 1) res = _mul(res, a);
  return res;
}
void pre_process() {
  F[0] = Fdiv[0] = 1;
  for (int i = 1; i < MAX_N; i++) {
    F[i] = _mul(F[i - 1], i);
    Fdiv[i] = _pow(F[i], MOD - 2);
  }
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  pre_process();
  cin >> s;
  for (int i = 0; i < s.size(); i++) {
    n += !cnt[s[i]];
    if (!cnt[s[i]]) num[s[i]] = p++;
    cnt[s[i]]++;
  }
  memset(cnt, 0, sizeof cnt);
  for (int i = 0; i < s.size(); i++) {
    Arr[i] = num[s[i]];
    cnt[Arr[i]]++;
  }
  n = s.size();
  m = p - 1;
  int tmp = 1;
  for (int i = 1; i <= m; i++) tmp = _mul(tmp, Fdiv[cnt[i]]);
  for (int i = 1; i <= m; i++)
    for (int j = i + 1; j <= m; j++) {
      memset(dp, 0, sizeof dp);
      dp[cnt[i] + cnt[j]] = 1;
      int sum = cnt[i] + cnt[j];
      for (int k = 1; k <= m; k++) {
        if (k == i || k == j) continue;
        if (sum < (n >> 1)) {
          sum += cnt[k];
          sum = min(sum, (n >> 1));
        }
        int L = min(cnt[i] + cnt[j], cnt[k]);
        for (int p = sum; L <= p; p--) dp[p] = _sum(dp[p], dp[p - cnt[k]]);
      }
      dp[n >> 1] = _mul(dp[n >> 1], _mul(F[n >> 1], F[n >> 1]));
      dp[n >> 1] = _mul(dp[n >> 1], tmp);
      ans[i][j] = _mul(2, dp[n >> 1]);
      ans[j][i] = ans[i][j];
    }
  for (int i = 1; i <= m; i++) {
    memset(dp, 0, sizeof dp);
    dp[cnt[i]] = 1;
    int sum = cnt[i];
    for (int k = 1; k <= m; k++) {
      if (k == i) continue;
      if (sum < (n >> 1)) {
        sum += cnt[k];
        sum = min(sum, (n >> 1));
      }
      int L = min(cnt[i], cnt[k]);
      for (int p = sum; L <= p; p--) dp[p] = _sum(dp[p], dp[p - cnt[k]]);
    }
    dp[n >> 1] = _mul(dp[n >> 1], _mul(F[n >> 1], F[n >> 1]));
    dp[n >> 1] = _mul(dp[n >> 1], tmp);
    ans[i][i] = _mul(2, dp[n >> 1]);
  }
  int q;
  cin >> q;
  while (q--) {
    int ind1, ind2;
    cin >> ind1 >> ind2;
    ind1--, ind2--;
    ind1 = num[s[ind1]];
    ind2 = num[s[ind2]];
    cout << ans[ind1][ind2] << "\n";
  }
  return 0;
}
