#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
long long mod = 1e9 + 7;
long long fmod(long long b, long long exp) {
  long long res = 1;
  while (exp) {
    if (exp & 1ll) res = (res * b) % mod;
    b = (b * b) % mod;
    exp /= 2ll;
  }
  return res;
}
long long buc[101];
long long fac[N], inv[N];
long long dp[N], temp_dp[N];
long long ans[55][55];
string s, s1, s2;
int find(char c) {
  if (c >= 'A' && c <= 'Z')
    return (int)(c - 'A' + 26);
  else
    return (c - 'a');
}
inline void add(long long &a, long long b) {
  a += b;
  if (a >= mod) a -= mod;
}
inline void sub(long long &a, long long b) {
  a -= b;
  if (a < 0) a += mod;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int t = 1, n, i, j, m, q;
  cin >> s;
  n = s.length();
  for (int i = 0; i < n; i++) buc[find(s[i])]++;
  fac[0] = 1;
  for (i = 1; i <= n; i++) fac[i] = (fac[i - 1] * 1ll * i) % mod;
  inv[n] = fmod(fac[n], mod - 2);
  for (int i = n - 1; i >= 0; i--) inv[i] = (inv[i + 1] * 1ll * (i + 1)) % mod;
  long long num = (fac[n / 2] * fac[n / 2]) % mod;
  for (int i = 0; i < 52; i++) num = (num * inv[buc[i]]) % mod;
  dp[0] = 1;
  for (int i = 0; i < 52; i++) {
    if (!buc[i]) continue;
    for (int j = n; j >= buc[i]; j--) add(dp[j], dp[j - buc[i]]);
  }
  for (i = 0; i < 52; i++) ans[i][i] = dp[n / 2];
  for (i = 0; i < 52; i++) {
    if (!buc[i]) continue;
    for (int k = 0; k <= n; k++) temp_dp[k] = dp[k];
    for (int k = buc[i]; k <= n; k++) sub(temp_dp[k], temp_dp[k - buc[i]]);
    for (int j = i + 1; j < 52; j++) {
      if (!buc[j]) continue;
      for (int k = buc[j]; k <= n; k++) sub(temp_dp[k], temp_dp[k - buc[j]]);
      ans[i][j] = (2ll * temp_dp[n / 2]) % mod;
      ans[j][i] = ans[i][j];
      for (int k = n; k >= buc[j]; k--) add(temp_dp[k], temp_dp[k - buc[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]) % mod << "\n";
  }
  return 0;
}
