#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e5 + 10;
const long long mod = 1e9 + 7;
long long jiecheng[maxn];
long long quick(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return ans;
}
long long C(int a, int b) {
  return (jiecheng[a] * quick(jiecheng[b], mod - 2) % mod) *
         quick(jiecheng[a - b], mod - 2) % mod;
}
int len, num[52];
char s[maxn];
void ini() {
  len = strlen(s);
  for (int i = 0; i < len; i++)
    if ('a' <= s[i] && s[i] <= 'z')
      s[i] -= 'a';
    else
      s[i] = s[i] - 'A' + 26;
  for (int i = 0; i < len; i++) num[s[i]]++;
}
long long ans[52][52], dp[maxn], tem[maxn];
int main() {
  jiecheng[0] = 1;
  jiecheng[1] = 1;
  for (int i = 2; i < maxn; i++) jiecheng[i] = i * jiecheng[i - 1] % mod;
  scanf("%s", s);
  ini();
  long long t = jiecheng[len / 2];
  t = t * t * 2 % mod;
  for (int i = 0; i < 52; i++) t = t * quick(jiecheng[num[i]], mod - 2) % mod;
  dp[0] = 1;
  for (int k = 1; k <= len / 2; k++) dp[k] = 0;
  for (int k = 0; k < 52; k++)
    if (num[k])
      for (int l = len / 2; l >= num[k]; l--) {
        if (dp[l - num[k]]) {
          dp[l] = (dp[l - num[k]] + dp[l]) % mod;
        }
      }
  for (int i = 0; i < 52; i++)
    for (int j = i; j < 52; j++) {
      for (int k = 0; k <= len; k++) tem[k] = dp[k];
      for (int k = num[i]; k <= len; k++)
        tem[k] = (tem[k] - tem[k - num[i]] + mod) % mod;
      if (i != j)
        for (int k = num[j]; k <= len; k++)
          tem[k] = (tem[k] - tem[k - num[j]] + mod) % mod;
      ans[i][j] = tem[len / 2] * t % mod;
    }
  int q;
  cin >> q;
  for (int i = 0; i < q; i++) {
    int a, b;
    cin >> a >> b;
    cout << ans[min(s[a - 1], s[b - 1])][max(s[a - 1], s[b - 1])] << endl;
  }
}
