#include <bits/stdc++.h>
using namespace std;
inline long long read(void) {
  register long long x = 0, sgn = 1, ch = getchar();
  while (ch < 48 || 57 < ch) {
    if (ch == 45) sgn = 0;
    ch = getchar();
  }
  while (47 < ch && ch < 58) {
    x = x * 10 + ch - 48;
    ch = getchar();
  }
  return sgn ? x : -x;
}
void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
const long long p = 1e9 + 7;
long long n, m, q, c, mul, a, b;
long long s[100005];
long long v[135];
char dy[135], ys[135];
long long Ans[60][60];
long long f[50005], zy[100005], ny[100005];
long long ksm(long long x, long long n) {
  if (n == 0) return 1;
  if (n == 1) return x % p;
  long long tmp = ksm(x, n >> 1);
  tmp = tmp * tmp % p;
  if (n & 1) tmp = tmp * x % p;
  return tmp;
}
inline void init(void) {
  n = 1;
  f[0] = 1;
  zy[0] = 1;
  for (register long long i = 1; i <= 100000; ++i) zy[i] = zy[i - 1] * i % p;
  ny[100000] = ksm(zy[100000], p - 2);
  for (register long long i = 100000; i >= 1; --i) ny[i - 1] = ny[i] * i % p;
}
inline void del(long long x) {
  for (register long long u = x; u <= m; ++u)
    (f[u] -= f[u - x]) < 0 && (f[u] += p);
}
inline void add(long long x) {
  for (register long long u = m; u >= x; --u)
    (f[u] += f[u - x]) >= p && (f[u] -= p);
}
signed main() {
  init();
  c = getchar();
  while (c != '\r' && c != '\n') {
    ++v[c];
    s[++m] = c;
    c = getchar();
  }
  for (register long long i = 1; i <= 130; ++i) dy[i] = i;
  for (register long long i = 1; i <= 130; ++i)
    for (register long long u = i + 1; u <= 130; ++u)
      if (v[u] > v[i]) {
        swap(v[u], v[i]);
        swap(dy[u], dy[i]);
      }
  for (register long long i = 1; i <= 130; ++i) ys[dy[i]] = i;
  while (v[n]) ++n;
  --n;
  m >>= 1;
  mul = zy[m] * zy[m] % p;
  for (register long long i = 1; i <= n; ++i) mul = mul * ny[v[i]] % p;
  for (register long long i = 1; i <= n; ++i) add(v[i]);
  for (register long long i = 1; i <= n; ++i) {
    Ans[i][i] = f[m] * mul % p;
    del(v[i]);
    for (register long long u = i + 1; u <= n; ++u) {
      del(v[u]);
      add(v[i] + v[u]);
      Ans[u][i] = Ans[i][u] = f[m] * mul % p;
      del(v[i] + v[u]);
      add(v[u]);
    }
    add(v[i]);
  }
  q = read();
  while (q--) {
    a = read();
    b = read();
    write(Ans[ys[s[a]]][ys[s[b]]]), puts("");
  }
  return 0;
}
