#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 1e5 + 5;
int inv[maxn], fact[maxn], finv[maxn];
inline int sub(const int& a, const int& b) {
  return a < b ? a - b + mod : a - b;
}
inline int add(const int& a, const int& b) { return sub(a, mod - b); }
inline int mul(const int& a, const int& b) { return 1LL * a * b % mod; }
void init(int n = maxn) {
  inv[0] = inv[1] = fact[0] = fact[1] = finv[0] = finv[1] = 1;
  for (int i = 2; i ^ n; ++i) {
    inv[i] = mul(inv[mod % i], mod - mod / i);
    fact[i] = mul(fact[i - 1], i);
    finv[i] = mul(finv[i - 1], inv[i]);
  }
}
int tot[maxn];
int main() {
  init();
  string str;
  cin >> str;
  int n = str.size() >> 1;
  map<char, int> cnt;
  for (auto ch : str) ++cnt[ch];
  vector<int> a, p(128, -1);
  for (auto now : cnt) {
    p[now.first] = a.size();
    a.push_back(now.second);
  }
  int base = mul(fact[n], fact[n]);
  tot[0] = 1;
  for (auto x : a) {
    base = mul(base, finv[x]);
    for (int i = n * 2; i >= x; --i) tot[i] = add(tot[i], tot[i - x]);
  }
  int res = mul(tot[n], base);
  int cal[52][52];
  for (int i = 0; i ^ a.size(); ++i)
    for (int j = i + 1; j ^ a.size(); ++j) {
      for (int k = a[i]; k <= n * 2; ++k) tot[k] = sub(tot[k], tot[k - a[i]]);
      for (int k = a[j]; k <= n * 2; ++k) tot[k] = sub(tot[k], tot[k - a[j]]);
      cal[i][j] = mul(add(tot[n], tot[n]), base);
      for (int k = n * 2; k >= a[i]; --k) tot[k] = add(tot[k], tot[k - a[i]]);
      for (int k = n * 2; k >= a[j]; --k) tot[k] = add(tot[k], tot[k - a[j]]);
    }
  int q;
  cin >> q;
  while (q--) {
    int x, y;
    cin >> x >> y;
    x = p[str[x - 1]];
    y = p[str[y - 1]];
    if (x > y) swap(x, y);
    assert(y < 52);
    if (x == y)
      cout << res << endl;
    else
      cout << cal[x][y] << endl;
  }
}
