#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int ch[130], n;
string s;
int jc, inv[100005];
int mul;
int dp[100005];
int ans[130][130];
void Mul(int t) {
  for (int i = n; i >= t; i--) {
    dp[i] = dp[i] - dp[i - t];
    if (dp[i] < 0) dp[i] += mod;
  }
}
void Div(int t) {
  for (int i = t; i <= n; i++) {
    dp[i] = dp[i] + dp[i - t];
    if (dp[i] > mod) dp[i] -= mod;
  }
}
void init() {
  jc = 1;
  for (int i = 1; i <= (n >> 1); i++) jc = (long long)jc * i % mod;
  inv[1] = inv[0] = 1;
  for (int i = 2; i <= n; i++) {
    inv[i] = (long long)(mod - mod / i) * inv[mod % i] % mod;
  }
  for (int i = 2; i <= n; i++) {
    inv[i] = (long long)inv[i - 1] * inv[i] % mod;
  }
  mul = 1;
  for (int i = 'A'; i <= 'z'; i++) {
    mul = (long long)mul * inv[ch[i]] % mod;
  }
  mul = (long long)mul * jc % mod;
  mul = (long long)mul * jc % mod;
  dp[0] = 1;
  for (int i = 'A'; i <= 'z'; i++) {
    if (ch[i] == 0) continue;
    for (int j = n; j >= ch[i]; j--) {
      dp[j] = dp[j] + dp[j - ch[i]];
      if (dp[j] > mod) dp[j] -= mod;
    }
  }
  for (int i = 'A'; i <= 'z'; i++) {
    if (ch[i] == 0) continue;
    Mul(ch[i]);
    Div(ch[i] << 1);
    ans[i][i] = dp[n / 2];
    for (int j = i + 1; j <= 'z'; j++) {
      if (ch[j] == 0) continue;
      Mul(ch[j]);
      Div(ch[j] << 1);
      ans[i][j] = ans[j][i] = dp[n / 2];
      Mul(ch[j] << 1);
      Div(ch[j]);
    }
    Mul(ch[i] << 1);
    Div(ch[i]);
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin >> s;
  n = s.size();
  for (int i = 0; i < n; i++) {
    ch[s[i]]++;
  }
  init();
  int _;
  cin >> _;
  int x, y;
  while (_--) {
    cin >> x >> y;
    x--;
    y--;
    cout << mul * 1ll * ans[s[x]][s[y]] * 2ll % mod << endl;
  }
}
