#include <bits/stdc++.h>
using namespace std;
long long modu = 1e9 + 7;
long long inv[100005];
long long fact[100005];
long long ct[52];
long long dp[100005];
long long dp1[52][52];
long long temp[100005];
void calc() {
  inv[0] = inv[1] = 1;
  fact[0] = fact[1] = 1;
  for (long long i = 2; i < 100005; i++) {
    inv[i] = (inv[modu % i] * (modu - (modu / i))) % modu;
    fact[i] = (i * fact[i - 1]) % modu;
  }
  for (long long i = 2; i < 100005; i++) {
    inv[i] = (inv[i - 1] * inv[i]) % modu;
  }
}
long long find(char c) {
  if (c >= 'A' && c <= 'Z')
    return (c - 'A' + 26);
  else
    return (c - 'a');
}
void knapsack(long long n) {
  memset(dp, 0, sizeof(dp));
  dp[0] = 1;
  for (long long i = 0; i < 52; i++) {
    for (long long j = n; j >= ct[i]; j--) {
      if (ct[i] > 0) dp[j] = (dp[j] + dp[j - ct[i]]) % modu;
    }
  }
  for (long long i = 0; i < 52; i++) {
    if (ct[i] > 0) {
      for (long long k = 0; k <= n; k++) temp[k] = dp[k];
      for (long long k = 1; k <= n; k++) {
        temp[k] =
            (temp[k] - (k - ct[i] >= 0 && ct[i] > 0 ? temp[k - ct[i]] : 0));
        if (temp[k] < 0) temp[k] = (temp[k] + modu) % modu;
      }
      for (long long j = 0; j < 52; j++) {
        if (i != j && ct[j] > 0) {
          for (long long k = 1; k <= n; k++) {
            temp[k] = (temp[k] - (k - ct[j] >= 0 ? temp[k - ct[j]] : 0));
            if (temp[k] < 0) temp[k] = (temp[k] + modu) % modu;
          }
        }
        dp1[i][j] = temp[n];
        if (i != j && ct[j] > 0) {
          for (long long k = n; k >= 1; k--) {
            temp[k] = (temp[k] + (k - ct[j] >= 0 ? temp[k - ct[j]] : 0)) % modu;
            if (temp[k] > modu) temp[k] = (temp[k]) % modu;
          }
        }
      }
    }
  }
}
int main() {
  string s;
  long long q;
  cin >> s;
  cin >> q;
  calc();
  long long N = s.length();
  long long M = (fact[N / 2] * fact[N / 2] + modu) % modu;
  memset(ct, 0, sizeof(ct));
  for (int i = 0; i < s.length(); i++) {
    ct[find(s[i])]++;
  }
  for (int i = 0; i < 52; i++) {
    M = (M * inv[ct[i]] + modu) % modu;
  }
  knapsack(N / 2);
  for (int i = 0; i < q; i++) {
    long long p, q;
    cin >> p >> q;
    p = find(s[p - 1]);
    q = find(s[q - 1]);
    cout << (2 * M * dp1[p][q] + modu) % modu << endl;
  }
  return 0;
}
