/*
Author: Shadow007
*/
#include<bits/stdc++.h>

using namespace std;
/*typedef*/
typedef unsigned int uint;
typedef long long lld;
typedef unsigned long long ulld;
typedef double lf;
typedef long double llf;
typedef pair<int,int> pii;
typedef pair<lld,lld> plld;

/*define*/

#define ff first
#define ss second
#define mp(a,b) make_pair(a,b)
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define fl(i,a,b) for(int i=a;i<=b;i++)
#define rfl(i,a,b) for(int i=a;i>=b;i--)
/*const*/
const lld  mod=1000000007;

lld power(lld m,lld n){
	lld ans=1;
	while(n){
		if(n&1) ans=(ans*m)%mod;
		m=(m*m)%mod;
		n/=2;
	}
return ans;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    string s;
    cin>>s;
   	int q;
   	cin>>q;
   	int l,r;
   	vector<lld> fact(1000001);
   	fact[0]=1;
   	for(lld i=1;i<1000001;i++){
   		fact[i]=(i*fact[i-1])%mod;
   	}
   	vector<vector<lld>> a(s.length()+1,vector<lld>(26));
   	for(int i=0;i<s.length();i++){
   		a[i+1][s[i]-97]++;
   	}
   	for(int i=1;i<s.length()+1;i++){
   		for(int j=0;j<26;j++){
   			a[i][j]+=a[i-1][j];
   		}
   	}
   	while(q--){
   		cin>>l>>r;
   		l,r;
   		vector<lld> k(26);
   		lld tot=0;
   		for(int i=0;i<26;i++){
   			k[i]=a[r][i]-a[l-1][i];
   			tot+=(k[i]/2);
   		}
   		lld count=0;
   		for(int i=0;i<26;i++){
   			if(k[i]%2==1) count++;
   		}
   		lld ans=fact[tot];
   		for(int i=0;i<26;i++){
   			k[i]/=2;
   			ans=(ans*(power(fact[k[i]],mod-2)))%mod;
   		}
   		if(count!=0) ans=(ans*count)%mod;
   		cout<<ans<<endl;
   	}
return 0;
}