#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = a; i<= b; ++i)
#define FORD(i, a, b) for (int i = a; i>=b; --i)
#define REP(i, a) for (int i = 0; i<a; ++i)
#define DEBUG(x) { cerr << #x << " = " << x << endl; }
#define Arr(A, l, r) { cerr << #A  << " = "; FOR(_, l, r) cerr << A[_] << ' '; cerr << endl; }
#define N 100100
#define pp pair<int, int>
#define next __next
#define prev __prev
#define __builtin_popcount __builtin_popcountll
#define bit(S, i) (((S) >> i) & 1)
#define IO cin.tie(NULL);cout.tie(NULL);
#define taskname ""
using namespace std;

const long long MOD = 1e9 + 7;
long long gt[N];
int cnt[N][26];

long long POW(long long a, long long k) {
    if (k == 0) return 1;
    long long t = POW(a, k >> 1);
    t = t * t % MOD;
    if (k % 2) t = t * a % MOD;
    return t;
}
void solve() {
    int l, r;
    cin >> l >> r;
    long long ans = 1;
    int odd = 0, total = 0;
    REP(i, 26) {
        int counter = cnt[r][i] - cnt[l - 1][i];
        if (counter % 2) odd++;
        total += counter / 2;
        ans = (ans * POW(gt[counter / 2], MOD - 2)) % MOD;
    }
    ans = ans * gt[total] % MOD;
    if (odd) ans = (ans * odd) % MOD;
    cout << ans << '\n';
}
int main() {
    IO;
    string st;
    cin >> st;
    int n = st.size();
    st = '~' + st;
    gt[0] = 1;
    FOR(i, 1, n) gt[i] = gt[i - 1] * i % MOD;
    FOR(i, 1, n) {
        REP(j, 26) cnt[i][j] = cnt[i - 1][j];
        cnt[i][st[i] - 'a']++;
    }
    int q;
    cin >> q;
    while (q--) solve();
}