#include <bits/stdc++.h>
using namespace std;
char s[100001];
int freq[130];
char d[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
long long ways[100001];
long long ways2[100001];
int n;
int binModPow(int base, int pot) {
  if (pot == 0) return 1;
  if (pot == 1) return base;
  long long sub = binModPow(base, pot / 2);
  return (((sub * sub) % 1000000007LL) * (pot % 2 ? (long long)base : 1LL)) %
         1000000007LL;
}
long long invMod(int base) { return binModPow(base, 1000000007LL - 2); }
void subsetsum() {
  ways[0] = 1;
  for (int i = 0; i < 52; i++)
    if (freq[d[i]])
      for (int j = n; j >= freq[d[i]]; j--)
        ways[j] = (ways[j] + ways[j - freq[d[i]]]) % 1000000007LL;
}
long long cantWays(char a, char b) {
  memcpy(ways2, ways, sizeof(ways2));
  for (int i = freq[a]; i <= n; i++) ways2[i] -= ways2[i - freq[a]];
  if (a != b)
    for (int i = freq[b]; i <= n; i++) ways2[i] -= ways2[i - freq[b]];
  while (ways2[n / 2] < 0) ways2[n / 2] += 1000000007LL;
  return (ways2[n / 2] + 1000000007LL) % 1000000007LL;
}
int res[130][130];
void precalc(long long val) {
  for (int i = 0; i < 52; i++)
    for (int j = i; j < 52; j++)
      if (freq[d[i]] && freq[d[j]])
        res[d[i]][d[j]] = res[d[j]][d[i]] =
            (cantWays(d[i], d[j]) * val) % 1000000007LL;
}
long long facMod(int lim) {
  long long res = 1;
  for (long long i = 2; i <= lim; i++) res = (res * i) % 1000000007LL;
  return res;
}
long long calcPermutations() {
  long long prod = facMod(n / 2);
  prod = (prod * prod) % 1000000007LL;
  for (int i = 0; i < 52; i++)
    if (freq[d[i]] > 1)
      prod = (prod * invMod(facMod(freq[d[i]]))) % 1000000007LL;
  return prod;
}
int main() {
  scanf("%s", &s[0]);
  n = strlen(s);
  for (int i = 0; i < n; i++) freq[s[i]]++;
  subsetsum();
  long long val = (calcPermutations() * 2LL) % 1000000007LL;
  precalc(val);
  int q, a, b;
  scanf("%d", &q);
  for (int i = 0; i < q; i++) {
    scanf("%d %d", &a, &b);
    printf("%d\n", res[s[a - 1]][s[b - 1]]);
  }
  return 0;
}
