#include<bits/stdc++.h>
#include <cstdio>
#include <iostream>

#define FAST ios_base::sync_with_stdio(0); cin.tie(0);
#define FOR(i, s, n) for (int i = s; i < n; i++)


using namespace std;
typedef long long ll;

string s;
int Q;
const int MAX = 100001;
int cnt[MAX][26];
int n;
int MOD = (int)1e9 + 7;
int fac[MAX];

int power (int num, int e) {
    ll res = 1;
    while(e) {
        if (e & 1) res = res * num % MOD;
        num = (int)(1ll * num * num % MOD);
        e >>= 1;
    }
    return (int)res;
}
int invv[MAX];
int inv (int num) {return power(num, MOD - 2);}
int nCr (int n, int k) {
    return (1ll * fac[n] * invv[k] % MOD) * invv[n - k] % MOD;
}
int solve (vector<int> cnts) {
    int odd = 0;
    int maxLen = 0;
    FOR (i, 0, 26) {
        odd += cnts[i] & 1;
        maxLen += cnts[i] >> 1;
    }

    ll res = max(1, odd);
    FOR (i, 0, 26) {
        res = res * nCr(maxLen, cnts[i] >> 1) % MOD, maxLen -= cnts[i] >> 1;
    }
    return (int)res;
}

int main() {
    FAST;

    fac[0] = fac[1] = 1;
    FOR (i, 2, MAX) fac[i] = (int)(1ll * fac[i - 1] * i % MOD);
    FOR (i, 0, MAX) invv[i] = inv(fac[i]);

    cin >> s;
    n = s.length();
    FOR (i, 0, n) {
        if (i) FOR (j, 0, 26) cnt[i][j] = cnt[i - 1][j];
        cnt[i][s[i] - 'a']++;
    }

    cin >> Q;
    while (Q--) {
        int l, r;
        cin >> l >> r;
        l--, r--;
        vector<int> cntHere;
        FOR (i, 0, 26) cntHere.push_back(cnt[r][i]);
        if (l) FOR (i, 0, 26) cntHere[i] -= cnt[l - 1][i];
        cout << solve(cntHere) << "\n";
    }
}