#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
long long modInv(long long a, long long m) {
  long long m0 = m;
  long long y = 0, x = 1;
  if (m == 1) return 0;
  while (a > 1) {
    long long q = a / m;
    long long t = m;
    m = a % m, a = t;
    t = y;
    y = x - q * y;
    x = t;
  }
  if (x < 0) x += m0;
  return x;
}
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;
}
long long fact[100009], inv[100009], n;
long long A[52], dp2[100009], B[52][52];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
#define sl int;
  string s;
  cin >> s;
  n = ((int)(s).size());
  memset((A), (0), sizeof(A));
  for (long long i = 0; i < n; i++) {
    if (isupper(s[i]))
      A[s[i] - 'A' + 26]++;
    else
      A[s[i] - 'a']++;
  }
  fact[0] = 1;
  for (long long i = 1; i <= n; i++) fact[i] = fact[i - 1] * 1LL * i % mod;
  inv[n] = modInv(fact[n], mod);
  for (long long i = n - 1; i >= 0; i--)
    inv[i] = inv[i + 1] * 1LL * (i + 1) % mod;
  long long a, b, c, ca, cb, n2 = n / 2;
  long long x = fact[n2] * fact[n2] % mod;
  for (long long i = 0; i < 52; i++) x = x * inv[A[i]] % mod;
  memset((dp2), (0), sizeof(dp2));
  dp2[0] = 1;
  for (long long i = 0; i < 52; i++) {
    if (A[i] != 0) {
      for (long long j = n2; j >= A[i]; j--) add(dp2[j], dp2[j - A[i]]);
    }
  }
  for (long long i = 0; i < 52; i++) {
    if (A[i]) {
      for (long long k = A[i]; k <= n2; k++) sub(dp2[k], dp2[k - A[i]]);
      for (long long j = i; j < 52; j++) {
        if (i != j && A[j])
          for (long long k = A[j]; k <= n2; k++) sub(dp2[k], dp2[k - A[j]]);
        B[i][j] = 2LL * dp2[n2] % mod;
        B[j][i] = B[i][j];
        if (i != j && A[j])
          for (long long k = n2; k >= A[j]; k--) add(dp2[k], dp2[k - A[j]]);
      }
      if (A[i])
        for (long long k = n2; k >= A[i]; k--) add(dp2[k], dp2[k - A[i]]);
    }
  }
  int q;
  cin >> q;
  while (q--) {
    cin >> a >> b;
    a--;
    b--;
    if (isupper(s[a]))
      ca = s[a] - 'A' + 26;
    else
      ca = s[a] - 'a';
    if (s[a] != s[b]) {
      if (isupper(s[b]))
        cb = s[b] - 'A' + 26;
      else
        cb = s[b] - 'a';
    } else
      cb = ca;
    cout << x * B[ca][cb] % mod << '\n';
  }
  return 0;
}
