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

const int64_t MOD = 1000000007;
const int maxn = 100002;

int n, ps[maxn][26], a[maxn];
string s;
int64_t fact[maxn];

int64_t POW(int64_t n, int64_t k) {
    if (k==0) return 1;
    int64_t tmp = POW(n, k/2);
    return k%2 ? tmp*tmp%MOD*n%MOD : tmp*tmp%MOD;
}

int main() {
    //freopen("rotator.inp", "r", stdin);
    ios::sync_with_stdio(0); cin.tie(0);
    cin >> s;
    int n = s.size();
    s = '@' + s;
    for (int i=1; i<=n; ++i) {
        for (int j=0; j<26; ++j) {
            ps[i][j] = ps[i-1][j] + (s[i]-'a'==j);
        }
    }
    fact[0] = 1;
    for (int i=1; i<=n; ++i)
        fact[i] = fact[i-1]*i%MOD;
    int nQuery; cin >> nQuery;
    while (nQuery--) {
        int l, r; cin >> l >> r;
        int odd=0, len=0;
        for (int i=0; i<26; ++i) {
            a[i] = ps[r][i] - ps[l-1][i];
            odd += a[i]%2;
            len += (a[i]-a[i]%2);
        }
        if (odd>0) ++len;
        int64_t res = fact[len/2];
        for (int i=0; i<26; ++i)
            res = (res*POW(fact[a[i]/2], MOD-2))%MOD;
        if (len%2!=0)
            res = (res*odd)%MOD;
        cout << res << '\n';
    }
}