#include <bits/stdc++.h>

using namespace std;

int cnt[100010][26];
constexpr int MOD = 1e9 + 7;
using ll = long long;
ll fact[100010];

ll pow_mod(ll a, ll b) {
    ll ans = 1;
    while (b > 0) {
        if (b & 1) ans = ans * a % MOD;
        a = a * a % MOD;
        b >>= 1;
    }
    return ans;
}

void initialize(string s) {
    // This function is called once before all queries.
    for (int i = 0; i < s.length(); ++ i) {
        if (i > 0) for (int j = 0; j < 26; ++ j) cnt[i][j] = cnt[i - 1][j];
        ++ cnt[i][s[i] - 'a'];
    }
    fact[0] = 1;
    for (int i = 1; i <= s.length(); ++ i) fact[i] = fact[i - 1] * i % MOD;
}

int answerQuery(int l, int r) {
    // Return the answer for this query modulo 1000000007.
    
    ll len = 0, odd = 0, ans = 1;
    for (int j = 0; j < 26; ++ j) {
        int tmp = cnt[r][j] - (l == 0 ? 0 : cnt[l - 1][j]);
        len += tmp / 2 * 2;
        if (tmp % 2 == 1) ++ odd;
        ans = ans * pow_mod(fact[tmp / 2], MOD - 2) % MOD;
    }
    
    if (odd) {
        return odd * fact[len / 2] % MOD * ans % MOD;
    } else return fact[len / 2] * ans % MOD;
}

int main() {
    string s;
    cin >> s;
    initialize(s);
    int q;
    cin >> q;
    for(int a0 = 0; a0 < q; a0++){
        int l;
        int r;
        cin >> l >> r;
        -- l, -- r;
        int result = answerQuery(l, r);
        cout << result << endl;
    }
    return 0;
}