#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int mod = 1000000007;
const int Maxn = 100005;
const int Maxl = 26;

int fac[Maxn], inv[Maxn];
int freq[Maxn][Maxl];

int Inv(int x)
{
    int res = 1;
    int p = mod - 2;
    while (p) {
        if (p & 1) res = ll(res) * x % mod;
        p >>= 1; x = ll(x) * x % mod;
    }
    return res;
}

int C(int n, int k)
{
    if (n < 0 || k < 0 || k > n) return 0;
    return ll(fac[n]) * inv[k] % mod * inv[n - k] % mod;
}

void initialize(string s) {
    for (int i = 1; i <= s.length(); i++) {
        for (int j = 0; j < Maxl; j++)
            freq[i][j] = freq[i - 1][j];
        freq[i][s[i - 1] - 'a']++;
    }
}

int answerQuery(int l, int r) {
    int odd = 0, tot = 0;
    for (int i = 0; i < Maxl; i++) {
        tot += (freq[r][i] - freq[l - 1][i]) / 2;
        odd += (freq[r][i] - freq[l - 1][i]) % 2;
    }
    int res = 1;
    if (odd > 0) res = ll(res) * odd % mod;
    for (int i = 0; i < Maxl; i++) {
        int my = (freq[r][i] - freq[l - 1][i]) / 2;
        res = ll(res) * C(tot, my) % mod; tot -= my;
    }
    return res;
}

int main() {
    fac[0] = inv[0] = 1;
    for (int i = 1; i < Maxn; i++) {
        fac[i] = ll(fac[i - 1]) * i % mod;
        inv[i] = Inv(fac[i]);
    }
    string s;
    cin >> s;
    initialize(s);
    int q;
    cin >> q;
    for(int a0 = 0; a0 < q; a0++){
        int l;
        int r;
        cin >> l >> r;
        int result = answerQuery(l, r);
        cout << result << endl;
    }
    return 0;
}