#include using namespace std; long long int mod=1000000007; long long int pwr(long long int n,long long int r) { if(r==1) { return n; } long long int p=pwr(n,r/2); if(r&1) { return (((p*p)%mod)*n)%mod; } else { return ((p*p)%mod); } }; long long int fct[1000007],invr[1000007]; void cal() { long int i; fct[0]=1; fct[1]=1; invr[1]=invr[0]=pwr(1,mod-2); for(i=2;i<=200007;i++) { fct[i]=fct[i-1]*i; if(fct[i]>=mod) { fct[i]%=mod; } invr[i]=pwr(fct[i],mod-2); if(invr[i]>=mod) { invr[i]%=mod; } } }; int main() { string s; cin>>s; cal(); long int i,n; n=s.length(); long int a[100007][26]={0}; int j; for(i=1;i<=n;i++) { for(j=0;j<26;j++) { a[i][j]=a[i-1][j]; } a[i][s[i-1]-'a']++; } long int q,l,r; cin >> q; long long int ans; long int arr[26]; long int upp,lwr; while(q--) { cin>>l>>r; upp=0; lwr=0; ans=1; for(j=0;j<26;j++) { arr[j]=a[r][j]-a[l-1][j]; if(arr[j]>0) { ans*=invr[arr[j]/2]; // cout<=mod) { ans%=mod; } upp+=arr[j]/2; if(arr[j]&1) { lwr++; } } } ans*=fct[upp]; if(ans>=mod) { ans%=mod; } // cout<=mod) { ans%=mod; } cout<