#include <bits/stdc++.h>
const int mod = 1e9 + 7;
inline void reduce(int &x) { x += x >> 31 & mod; }
std::string __s;
long long C;
int n, nn, q;
int fac[100010], inv[100010];
int s[100010], cnt[52];
int f[100010], g[100010], ans[52][52];
int solve(int x, int y) {
  std::copy(f, f + nn + 1, g);
  for (int i = cnt[x]; i <= nn; ++i) reduce(g[i] -= g[i - cnt[x]]);
  for (int i = cnt[y]; i <= nn; ++i) reduce(g[i] -= g[i - cnt[y]]);
  return 2 * g[nn] % mod;
}
int main() {
  std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
  std::cin >> __s;
  n = __s.length(), nn = n >> 1;
  for (int i = 0; i < n; ++i) {
    s[i + 1] = islower(__s[i]) ? __s[i] - 'a' : __s[i] - 'A' + 26;
    ++cnt[s[i + 1]];
  }
  fac[0] = fac[1] = inv[0] = inv[1] = 1;
  for (int i = 2; i <= nn; ++i) {
    fac[i] = static_cast<long long>(fac[i - 1]) * i % mod;
    inv[i] = static_cast<long long>(mod - mod / i) * inv[mod % i] % mod;
  }
  for (int i = 2; i <= nn; ++i)
    inv[i] = static_cast<long long>(inv[i - 1]) * inv[i] % mod;
  C = static_cast<long long>(fac[nn]) * fac[nn] % mod;
  for (int i = 0; i < 52; ++i) C = C * inv[cnt[i]] % mod;
  f[0] = 1;
  for (int i = 0; i < 52; ++i)
    if (cnt[i])
      for (int j = nn; j >= cnt[i]; --j) reduce(f[j] += f[j - cnt[i]] - mod);
  for (int i = 0; i < 52; ++i)
    if (cnt[i]) {
      for (int j = i + 1; j < 52; ++j)
        if (cnt[j]) ans[i][j] = ans[j][i] = solve(i, j);
      ans[i][i] = f[nn];
    }
  std::cin >> q;
  while (q-- > 0) {
    static int x, y;
    std::cin >> x >> y;
    x = s[x], y = s[y];
    std::cout << C * ans[x][y] % mod << '\n';
  }
  return 0;
}
