#include <bits/stdc++.h>
using namespace std;

const int ALPHA = 30;
const int MAXN = 1e5 + 5;
const int MOD = 1e9 + 7;

inline int mul_mod(int a, int b) {
    return a * 1LL * b % MOD;
}

int mpow(int a, int b) {
    int res = 1;
    while (b > 0) {
        if (b & 1)
            res = mul_mod(res, a);
        a = mul_mod(a, a);
        b >>= 1;
    }
    return res;
}

int cnt[MAXN][ALPHA], fact[MAXN];
char str[MAXN];

int main() {
    fact[0] = 1;
    for (int i = 1; i < MAXN; i++)
        fact[i] = mul_mod(fact[i - 1], i);
    scanf("%s", str + 1);
    int n = strlen(str + 1), q;
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < ALPHA; j++)
            cnt[i][j] = cnt[i - 1][j];
        cnt[i][(int)str[i] - 'a']++;
    }
    scanf("%d", &q);
    while (q--) {
        int l, r;
        scanf("%d %d", &l, &r);
        int odd_cnt = 0;
        int div_with = 1, total = 0;
        for (int j = 0; j < ALPHA; j++) {
            int how_much = (cnt[r][j] - cnt[l - 1][j]);
            if (how_much & 1)
                odd_cnt++;
            if (how_much / 2 > 0) {
                div_with = mul_mod(div_with, fact[how_much / 2]);
                total += how_much / 2;
            }
        }
        printf("%d\n", mul_mod(mul_mod(fact[total], mpow(div_with, MOD - 2)), odd_cnt > 0 ? odd_cnt : 1));
    }
    return 0;
}