#include #include #include #include #include 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<>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<