#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
const int md = 1e9 + 7;
long long fac[maxn], inv[maxn];
int cnt[55], ans[55][55];
int dp[maxn], temp_dp[maxn];
string s;
void init(int n) {
  fac[0] = inv[0] = 1;
  fac[1] = inv[1] = 1;
  for (int i = 2; i <= n; ++i)
    fac[i] = fac[i - 1] * i % md, inv[i] = (md - md / i) * inv[md % i] % md;
  for (int i = 2; i <= n; ++i) inv[i] = inv[i - 1] * inv[i] % md;
}
int find(char c) {
  if (c >= 'A' && c <= 'Z')
    return c - 'A';
  else
    return c - 'a' + 26;
}
void inc(int &a, int b) { a = a + b >= md ? a + b - md : a + b; }
void dec(int &a, int b) { a = a - b < 0 ? a - b + md : a - b; }
int main() {
  int n, q;
  cin >> s;
  n = s.length();
  for (int i = 0; i < n; ++i) cnt[find(s[i])]++;
  init(n);
  long long num = fac[n / 2] * fac[n / 2] % md;
  for (int i = 0; i < 52; ++i) (num *= inv[cnt[i]]) %= md;
  dp[0] = 1;
  for (int i = 0; i < 52; ++i) {
    if (!cnt[i]) continue;
    for (int j = n; j >= cnt[i]; --j) inc(dp[j], dp[j - cnt[i]]);
  }
  for (int i = 0; i < 52; ++i) ans[i][i] = dp[n / 2];
  for (int i = 0; i < 52; ++i) {
    if (!cnt[i]) continue;
    for (int k = 0; k <= n; ++k) temp_dp[k] = dp[k];
    for (int k = cnt[i]; k <= n; ++k) dec(temp_dp[k], temp_dp[k - cnt[i]]);
    for (int j = i + 1; j < 52; ++j) {
      if (!cnt[j]) continue;
      for (int k = cnt[j]; k <= n; ++k) dec(temp_dp[k], temp_dp[k - cnt[j]]);
      ans[i][j] = 2ll * temp_dp[n / 2] % md;
      ans[j][i] = ans[i][j];
      for (int k = n; k >= cnt[j]; --k) inc(temp_dp[k], temp_dp[k - cnt[j]]);
    }
  }
  cin >> q;
  int x, y;
  while (q--) {
    cin >> x >> y;
    int l = find(s[x - 1]);
    int r = find(s[y - 1]);
    cout << (num * ans[l][r]) % md << endl;
  }
  return 0;
}
