#include<bits/stdc++.h> using namespace std; // std macros typedef long long ll; typedef pair<int ,int> pii; typedef pair<ll ,ll> pll; // dereference #define F first #define S second #define pb push_back #define mp make_pair // loops #define rep(i,n) for(int i=0;i<n;++i) #define REP(i,a,b) for(int i=a;i<=b;++i) #define PER(i,b,a) for(int i=b;i>=a;--i) #define all(X) (X).begin(), (X).end() // I/O #define sd(n) scanf("%d",&n) #define sd2(x,y) scanf("%d%d",&x,&y) #define sd3(x,y,z) scanf("%d%d%d",&x,&y,&z) #define sll(n) scanf("%lld",&n) #define sll2(x,y) scanf("%lld%lld",&x,&y) #define sll3(x,y,z) scanf("%lld%lld%lld",&x,&y,&z) #define ss(s) scanf("%s",s) // debug #define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl #define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n" #define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n" #define debug4(x,y,z,w) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\t"<<#w<<" :: "<<w<<"\n" // set values #define mset(n,k) memset(n,k,sizeof(n)) //modular expo ll power(ll a,ll b, ll c){ ll x=1,y=a; while(b>0){ if(b&1) x=(x*y)%c; y=(y*y)%c; b/=2; } return x%c; } int dx[]={0,-1,0,1}; int dy[]={-1,0,1,0};//clockwise from left int dr[]={1,1,0,-1,-1,-1, 0, 1}; int dc[]={0,1,1, 1, 0,-1,-1,-1};//anticlockwise from down const ll N = 1e5+5,MOD = 1e9+7; ll DP[N][30],F[N],IF[N]; int main() { F[0] = IF[0] = 1; REP(i,1,N-1) { F[i] = (i*F[i-1])%MOD; IF[i] = power(F[i],MOD-2,MOD); } string s; cin>>s; int n = s.size(); REP(i,1,n) { DP[i][s[i-1]-'a'] = 1; rep(j,26) { DP[i][j]+=DP[i-1][j]; } } int q; sd(q); while(q--) { int x,y; sd2(x,y); ll odd = 0,den = 1,num = 1,tot = 0; rep(j,26) { ll occ = DP[y][j]-DP[x-1][j]; odd+=(occ&1); ll ti = occ/2; tot+=ti; den = (den*IF[ti])%MOD; } num = F[tot]; ll ans = (num*den)%MOD; //debug2(ans,odd); if(odd) ans = (ans*odd)%MOD; printf("%lld\n",ans); } return 0; }