#include #define int long long #define ll long long #define pb push_back #define pii pair #define vi vector #define vii vector #define mi map #define mii map #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>= 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<>t; while(t--) solve(); return 0; }