#include using namespace std; // std macros typedef long long ll; typedef pair pii; typedef pair 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=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<<"::"<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; }