#include<stdio.h> #include<bits/stdc++.h> using namespace std; #define pb push_back #define fi first #define se second int lp[1000007]; char a[1000007]; int b[1000007]; long long int bb[27][1000007]; long long int fact[1000007]; long long int factm[1000007]; int prime() { long long int i,j; for(i=2;i<=1e6;i++) { if(lp[i]) continue; for(j=i*i;j<=1e6;j=j+i) if(!lp[j]) lp[j]=i; lp[i]=i; } return 0; } long long int exp(long long int a,long long int b) { long long int tem=1; while(b) { if(b%2) tem=(tem*a)%1000000007; a=(a*a)%1000000007; b=b/2; } return tem; } int main() { int i,j; fact[0]=1; factm[0]=1; for(i=1;i<=1e5;i++) fact[i]=(fact[i-1]*i)%1000000007,factm[i]=exp(fact[i],1000000005); scanf("%s",a+1); int aa; scanf("%d",&aa); for(i=1;a[i];i++) bb[a[i]-'a'][i]++; for(i=0;i<26;i++) for(j=1;a[j];j++) bb[i][j]=bb[i][j]+bb[i][j-1]; for(i=0;i<aa;i++) { int l,r; scanf("%d %d",&l,&r); for(j=0;j<26;j++) b[j]=bb[j][r]-bb[j][l-1]; int ans=0; int anss=0; int ansss; for(j=0;j<26;j++) { ans=ans+b[j]/2; anss=anss+b[j]%2; } ansss=fact[ans]; for(j=0;j<26;j++) { ansss=(1LL*ansss*factm[b[j]/2])%1000000007; } ansss=(1LL*ansss*max(anss,1))%1000000007; printf("%d\n",ansss); } return 0; }