#include <bits/stdc++.h>

using namespace std;

const int N = 100003;
const long long MOD = 1000000007;

long long fact[N];
long long ifact[N];

long long binpow(long long a, long long x) {
    if  (x == 0) {
        return 1;
    }
    if (x % 2 == 0) {
        long long t = binpow(a, x/2);
        return t * t % MOD;
    } else {
        return a * binpow(a, x-1) % MOD;
    }
}

long long inverse(long long x) {
    return binpow(x, MOD-2);
}

int cnt[N+1][26];

void initialize(string s) {
    memset(cnt, 0, sizeof(cnt));
    int n = s.length();
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < 26; j++) {
            cnt[i+1][j] = cnt[i][j];
        }
        char c = s[i];
        cnt[i+1][c-'a']++;
    }
}

int answerQuery(int l, int r) {
    int curr[26];
    for (int i = 0; i < 26; i++) {
        curr[i] = cnt[r][i] - cnt[l-1][i];
    }
    
    vector<int> pairs;
    int tp = 0;
    int singles = 0;
    
    for (int i = 0; i < 26; i++) {
        //cerr << curr[i] << " ";
        int q = curr[i] / 2;
        pairs.push_back(q);
        tp += q;
        if (curr[i] % 2 == 1) {
            singles++;
        }
    }
    //cerr << endl;

    long long res = 1;
    if (singles > 0) {
        res = singles;
    }
    
    res = res * fact[tp] % MOD;
    for (int i = 0; i < pairs.size(); i++) {
        res = res * ifact[pairs[i]] % MOD;
    }
    
    return res;
}

int main() {
    string s;
    cin >> s;
    initialize(s);
    int q;
    cin >> q;
    fact[0] = 1;
    ifact[0] = 1;
    for (int i = 1; i < N; i++) {
        fact[i] = fact[i-1] * i % MOD;
        ifact[i] = inverse(fact[i]);
    }
    for(int a0 = 0; a0 < q; a0++){
        int l;
        int r;
        cin >> l >> r;
        int result = answerQuery(l, r);
        cout << result << endl;
    }
    return 0;
}