/* ****Enigma27**** */

#include<bits/stdc++.h>
#define ll          long long
#define pb          push_back
#define	endl		'\n'
#define pll         pair<ll int,ll int>
#define vll          vector<ll int>
#define all(a)      (a).begin(),(a).end()
#define x           first
#define y           second
#define hell        1000000007
#define lbnd        lower_bound
#define ubnd        upper_bound
#define bs          binary_search
#define rep(i,a,b)   for(ll i=a;ia<b;i++)
#define gcd(a,b)    __gcd((a),(b))
#define lcm(a,b)    ((a)*(b)) / gcd((a),(b))
const double 	pi=3.141592653589793238462643383279502884197169399375105820974944;
#define ios	    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
#define N	100005
ll n,i,j,k,l,sum=0,flag=0,ans=0,q,a[26][N],r,fact[N];
string s;
ll expo(ll base, ll exponent, ll mod) {								//return base^exponent modulo modulus
    ll 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;
}
ll inv(ll x){
	return expo(x,hell-2,hell);
}
int main()
{	
	//ios
	memset(a,0,sizeof a);
	fact[0]=1;
	for(i=1;i<N;i++){
		fact[i]=(i*fact[i-1])%hell;
	}
	cin>>s;
	n=s.size();
	for(i=0;i<n;i++){
		a[s[i]-'a'][i+1]++;
	}
	for(i=0;i<26;i++){
		for(j=1;j<=n;j++){
			a[i][j]+=a[i][j-1];
		}
	}
	cin>>q;
	while(q--){
		ll odd=0,total=0;
		vll v;
		cin>>l>>r;
		for(i=0;i<26;i++){
			ll k=(a[i][r]-a[i][l-1]);
			if(k&1) odd++,k--;
			total+=k/2;
			if(k/2) v.pb(k/2);
		}
		if(odd==0)  odd=1;
		ll ans=fact[total];
		ans=(ans*odd)%hell;
		for(auto j:v) ans=(ans*inv(fact[j]))%hell;
		v.clear();
		cout<<ans<<endl;
	}
	
	return 0;
}