/* Author: Shadow007 */ #include<bits/stdc++.h> using namespace std; /*typedef*/ typedef unsigned int uint; typedef long long lld; typedef unsigned long long ulld; typedef double lf; typedef long double llf; typedef pair<int,int> pii; typedef pair<lld,lld> plld; /*define*/ #define ff first #define ss second #define mp(a,b) make_pair(a,b) #define pb push_back #define pf push_front #define pob pop_back #define pof pop_front #define fl(i,a,b) for(int i=a;i<=b;i++) #define rfl(i,a,b) for(int i=a;i>=b;i--) /*const*/ const lld mod=1000000007; lld power(lld m,lld n){ lld ans=1; while(n){ if(n&1) ans=(ans*m)%mod; m=(m*m)%mod; n/=2; } return ans; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); string s; cin>>s; int q; cin>>q; int l,r; vector<lld> fact(1000001); fact[0]=1; for(lld i=1;i<1000001;i++){ fact[i]=(i*fact[i-1])%mod; } vector<vector<lld>> a(s.length()+1,vector<lld>(26)); for(int i=0;i<s.length();i++){ a[i+1][s[i]-97]++; } for(int i=1;i<s.length()+1;i++){ for(int j=0;j<26;j++){ a[i][j]+=a[i-1][j]; } } while(q--){ cin>>l>>r; l,r; vector<lld> k(26); lld tot=0; for(int i=0;i<26;i++){ k[i]=a[r][i]-a[l-1][i]; tot+=(k[i]/2); } lld count=0; for(int i=0;i<26;i++){ if(k[i]%2==1) count++; } lld ans=fact[tot]; for(int i=0;i<26;i++){ k[i]/=2; ans=(ans*(power(fact[k[i]],mod-2)))%mod; } if(count!=0) ans=(ans*count)%mod; cout<<ans<<endl; } return 0; }