#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN=1e5;
typedef long long LL;
const LL MOD=1e9+7;
int q;
char s[MAXN+10];
int cnt[MAXN+10][26];
int _c[26];
LL fac[MAXN+10],inv[MAXN+10];
LL qpow(LL x,LL n){
    LL ans=1;
    while(n){
        if(n&1)ans=ans*x%MOD;
        x=x*x%MOD;
        n>>=1;
    }
    return ans;
}
LL solve(int l,int r){
    int s=0,rs=0;
    for(int j=0;j<26;j++){
        _c[j]=cnt[r][j]-cnt[l-1][j];
        if(_c[j]&1){
            _c[j]--;
            rs++;
        }
        s+=(_c[j] >> 1);
    }
    LL ans=fac[s];
    for(int j=0;j<26;j++)
        if(_c[j]>0){
            // cout<<j<<" "<<_c[j]<<endl;
            ans=ans*inv[_c[j]>>1]%MOD;
        }
    return rs==0?ans:(ans*rs%MOD);
}
int main(){
    scanf("%s",s+1);
    int len=strlen(s+1);
    fac[0]=1;
    for(int i=1;i<=len+3;i++)fac[i]=(fac[i-1]*i)%MOD;
    inv[len+3]=qpow(fac[len+3],MOD-2);
    for(int i=len+2;i>=0;i--)inv[i]=inv[i+1]*(i+1)%MOD;
    for(int i=1;i<=len;i++){
        for(int j=0;j<26;j++)cnt[i][j]=cnt[i-1][j];
        cnt[i][s[i]-'a']++;
    }
    cin>>q;
    while(q--){
        int l,r;cin>>l>>r;
        cout<<solve(l,r)<<endl;
    }
    return 0;
}