#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define pb push_back
#define x first
#define y second
#define fastread ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define PI (atan(1)*4)
#define mp make_pair
using namespace std;

string s;
const int maxn=1e5+4;
ll dp[maxn][26];
const ll mod=1e9+7;
ll fact[maxn],inv[maxn],ifact[maxn];
void calcInv(){
    for(int i=0;i<2;i++){
        fact[i]=1;
        ifact[i]=1;
        inv[i]=1;
    }
    for(int i=2;i<maxn;i++){
        fact[i]=(i*fact[i-1])%mod;
        ll q=mod/i,r=mod%i;
        inv[i]=(-q*inv[r])%mod;
        inv[i]=(inv[i]+mod)%mod;
        ifact[i]=(inv[i]*ifact[i-1])%mod;
    }
}


void solve(){
    int l,r;
    cin>>l>>r;
    int elen=1,oddlen=0;
    ll ans=1;
    ll len=0;
    for(int i=0;i<26;i++){
        ll val=dp[r][i]-dp[l-1][i];
        if(val%2==1)
            oddlen++;
        val/=2;
        len+=val;
        ans=(ans*ifact[val])%mod;
    }
    ans=(ans*fact[len])%mod;
    ans=(ans*max(elen,oddlen))%mod;
    cout<<ans;
}

int main()
{
    fastread;
    calcInv();
    cin>>s;
    for(int i=0;i<s.size();i++){
        dp[i+1][s[i]-'a']++;
        for(int j=0;j<26;j++)
            dp[i+1][j]+=dp[i][j];
    }
    int q;
    cin>>q;
    while(q--){
        solve();
        cout<<'\n';
    }
    return 0;
}