#include const int maxn=1e5+10,mod=1e9+7; int n,m,k,t,pr[maxn][26],fac[maxn],inv[maxn]; using namespace std; char a[maxn]; int qpow(int x,int y) { int ret=1; while(y) { if(y&1) { ret=1LL*ret*x%mod; } x=1LL*x*x%mod; y>>=1; } return ret; } void init() { fac[0]=1; for(int i=1;i=0;i--)inv[i]=1LL*inv[i+1]*(i+1)%mod; } int main() { int i,j; init(); scanf("%s",a+1); for(i=1;a[i];i++) { for(j=0;j<26;j++) { pr[i][j]=pr[i-1][j]+(a[i]==j+'a'); } } int q; scanf("%d",&q); while(q--) { int l,r; scanf("%d%d",&l,&r); int cnt[26],delta=0,sum=0; for(i=0;i<26;i++) { cnt[i]=pr[r][i]-pr[l-1][i]; if(cnt[i]&1)delta++; sum+=(cnt[i]/=2); } if(delta==0)delta++; int ret=1LL*fac[sum]*delta%mod; for(i=0;i<26;i++)ret=1LL*ret*inv[cnt[i]]%mod; printf("%d\n",ret); } return 0; }