#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
long long mod = 1000000007;
long long pow(long long a, long long b) {
long long x = 1, y = a;
    while(b > 0) {
        if(b%2 == 1) {
            x=(x*y);
            if(x>mod) x%=mod;
        }
        y = (y*y);
        if(y>mod) y%=mod;
        b /= 2;
    }
    return x;
}
long long mmi(long long a) {
    return pow(a,mod-2);
}
vector<long long> factorial;
long long findfac(long long a){
    if(factorial.size() > a)
        return factorial[a];
    if(factorial.size() == 0)
        factorial.push_back(1);
    for(long long i = factorial.size(); i <= a;i++)
        factorial.push_back((factorial[i-1]*i)%mod);
    return factorial[a];
}

int main() {
    string s;
    cin>>s;
    vector<long> temp(26, 0);
    vector<vector<long> > arr(s.size()+1, temp);
    for(long i=1;i<=s.size();i++){
        arr[i] = arr[i-1];
        arr[i][s[i-1]-'a']++;
    }
    long t;
    cin>>t;
    while(t--) {
        long l, r;
        scanf("%ld %ld", &l, &r);
        vector<long> vals = arr[r];
        for(long j=0;j<26;j++) vals[j] -= arr[l-1][j];
        long long ans = 1;
        long long doubles = 0, singles = 0;
        for(long j=0;j<26;j++){
            long long x = vals[j]/2;
            doubles += x;
            ans *= mmi(findfac(x));
            ans %= mod;
            vals[j] %= 2;
            singles += vals[j];
        }
        //cout<<"ans = "<<ans<<" doubles = "<<doubles<<" singles = "<<singles<<endl;
        ans *= findfac(doubles);
        ans %= mod;
        if(singles != 0)
            ans *= singles;
        ans %= mod;
        printf("%lld\n", ans);
    }
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */   
    return 0;
}