#include #define mod ll(1e9+7) #define sc(x) scanf("%d",&x) #define pb push_back #define mp make_pair #define F first #define S second #define endl '\n' #define pc putchar_unlocked #define gc getchar_unlocked #define gx getchar #define be(v) v.begin(),v.end() #define mem(s,v) memset(s,v,sizeof(s)) #define fr(i,a,n) for(int i=a;i vi; typedef vector vll; typedef pair pi; typedef pair pil; typedef pair pll; typedef vector vpll; typedef vector vpil; typedef vector vpii; inline void print (int n) {int NN=n,rev,count=0;rev = NN;if(NN==0){pc('0');return;}while((rev%10)==0){count++;rev/=10;}rev=0; while(NN!=0){rev=(rev<<3)+(rev<<1)+NN%10;NN/=10;}while (rev != 0) { pc(rev % 10 + '0'); rev /= 10;}while(count--)pc('0');} inline void lprint(ll n){if(n<0LL){n=-n;pc('-');}int i=21;char o[21];do{o[--i]=(n%10LL)+'0';n/=10LL;}while(n); do{pc(o[i]);}while(++i<21);} inline void input(int& num){num=0;char c=gc();int flag=0;while(!((c>='0'&c<='9')||c=='-'))c=gc();if(c=='-'){flag=1;c=gc();} while(c>='0'&&c<='9'){num=(num<<1)+(num<<3)+c-'0';c=gc();}if(flag==1)num=0-num;} inline void linput(ll& num){num=0;char c=gc();int flag=0;while(!((c>='0'&c<='9')||c=='-'))c=gc();if(c=='-'){flag=1;c=gc();} while(c>='0'&&c<='9'){num=(num<<1)+(num<<3)+c-'0';c=gc();}if(flag==1)num=0-num;} inline void sscan(string &a){char c=gx();while(c==' '||c=='\n')c=gx();while(c!='\n'&&c!=' '){a+=c;c=gx();}} inline ll power(ll a,ll n,ll mod1) {ll b=a,ans=1;while(n){if(n&1) ans=(ans*b)%mod1; b=(b*b)%mod1; n>>=1;} return ans;} int gcd(int a,int b){if(b==0)return a;else return(gcd(b,a%b));} int main() { string s; cin >> s; int sz=s.size(); int arr[sz+5][27]; memset(arr,0,sizeof(arr)); for(int i=1;i<=sz;i++) { for(int j=1;j<=26;j++) { arr[i][j]=arr[i-1][j]; } arr[i][s[i-1]-96]++; } long fac[100005]; fac[0]=1; for(int i=1;i<=100002;i++) fac[i]=(fac[i-1]*i)%mod; int q; cin>>q; while(q--) { int l,r,ans=0; cin>>l>>r; int tem[27]={0},len=0; for(int i=1;i<=26;i++) { if((arr[r][i]-arr[l-1][i])%2==1) { ans++; } tem[i]=(arr[r][i]-arr[l-1][i])/2; len+=tem[i]; } long div=1; for(int i=1;i<=26;i++) { if(tem[i]!=0) { div=(div*fac[tem[i]])%mod; } } div=power(div,mod-2,mod); long ans1; ans1=(fac[len]*div)%mod; if(ans!=0) ans1=(ans1*ans)%mod; cout<