#include <bits/stdc++.h> #define int long long #define ll long long #define pb push_back #define pii pair<int,int> #define vi vector<int> #define vii vector<pii> #define mi map<int,int> #define mii map<int,pii> #define all(a) (a).begin(),(a).end() #define x first #define y second #define sz(x) (int)x.size() #define hell 1000000007 #define endl '\n' #define rep(i,a,b) for(int i=a;i<b;i++) using namespace std; int expo(int base, int exponent, int mod) { //return base^exponent modulo modulus int ans = 1; while(exponent !=0 ) { if((exponent&1) == 1) { ans = ans*base ; ans = ans%mod; } base = base*base; base %= mod; exponent>>= 1; } return ans%mod; } int q,v[100005][26],fac[100005]; mi inv; void solve() { string s; cin>>s; cin>>q; int n=sz(s); v[0][s[0]-'a']=1; rep(i,1,n){ rep(j,0,26) v[i][j]=v[i-1][j]; v[i][s[i]-'a']++; } fac[0]=1; rep(i,1,100005) fac[i]=(i*fac[i-1])%hell; rep(i,1,100005) inv[fac[i]]=expo(fac[i],hell-2,hell); while(q--) { int l,r; cin>>l>>r; l--,r--; int odds=0,ans=1,f[26]={0}; rep(i,0,26){ f[i]=v[r][i]-(l?v[l-1][i]:0); if(f[i]%2) odds++; f[i]/=2; } int s=0; rep(i,0,26){ s+=f[i]; ans=(ans*inv[fac[f[i]]])%hell; } ans=(ans*fac[s])%hell; if(odds) ans=(ans*odds)%hell; cout<<ans<<endl; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t=1; // cin>>t; while(t--) solve(); return 0; }