//teja349
#include <bits/stdc++.h>
#include <vector>
#include <set>
#include <map>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <climits>
#include <utility>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <iomanip> 
//setbase - cout << setbase (16); cout << 100 << endl; Prints 64
//setfill -   cout << setfill ('x') << setw (5); cout << 77 << endl; prints xxx77
//setprecision - cout << setprecision (14) << f << endl; Prints x.xxxx
//cout.precision(x)  cout<<fixed<<val;  // prints x digits after decimal in val

using namespace std;
#define f(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) f(i,0,n)
#define fd(i,a,b) for(i=a;i>=b;i--)
#define pb push_back
#define mp make_pair
#define vi vector< int >
#define vl vector< ll >
#define ss second
#define ff first
#define ll long long
#define pii pair< int,int >
#define pll pair< ll,ll >
#define sz(a) a.size()
#define inf (1000*1000*1000+5)
#define all(a) a.begin(),a.end()
#define tri pair<int,pii>
#define vii vector<pii>
#define vll vector<pll>
#define viii vector<tri>
#define mod (1000*1000*1000+7)
#define pqueue priority_queue< int >
#define pdqueue priority_queue< int,vi ,greater< int > >

//std::ios::sync_with_stdio(false);   
ll inv[100003],mult[100003],invmult[100003];
ll gcd(ll a,ll b){
	while(b!=0){
		
		a=a%b;
		swap(a,b);
	}
	return a;
}

ll extend_gcd(ll a,ll b,ll &x,ll &y){
	if(b==0){
		x=1;
		y=0;
		return a;
	}
	ll x1,y1;
	ll ans =extend_gcd(b,a%b,x1,y1);
	x=y1;
	y=x1-(a/b)*y1;

	return ans;
}

ll combination(ll n,ll r){
	if(r==0)
		return 1;
	if(n<r)
		return 0;
	ll ans=1;
	ans*=mult[n];
	ans%=mod;
	ans*=invmult[r];
	ans%=mod;
	ans*=invmult[n-r];
	ans%=mod;
	return ans;
}

ll initcombi(){
	int i;
	f(i,1,100001){
		ll x,y;
		ll val=extend_gcd(mod,i,x,y);
		if(y>0)
			inv[i]=y%mod;
		else{
				inv[i]=(y+mod)%mod;
		}
	}
	mult[0]=1;
	f(i,1,100001){
		mult[i]=mult[i-1]*i;
		mult[i]%=mod;
	}
	invmult[0]=1;
	f(i,1,100001){
		invmult[i]=invmult[i-1]*inv[i];
		invmult[i]%=mod;
	}
	return 0;
}


// do initcombi();
int arr[123456][30];
ll haha[1234];
int main(){
	initcombi();
    std::ios::sync_with_stdio(false);
    string s;
    cin>>s;
    int q;
    cin>>q;
    int n=s.length();
    int i,j;
    rep(i,n){
    	arr[i+1][s[i]-'a']++;
    }
    f(i,1,n+1){
    	rep(j,26){
    		arr[i][j]+=arr[i-1][j];
    	}
    }
    int l,r;
    while(q--){
    	cin>>l>>r;
    	ll cnt=0,ans=1,sumi=0;
    	rep(i,26){
    		haha[i]=arr[r][i]-arr[l-1][i];
    		if(haha[i]%2){
    			cnt++;
    			
    		}
    		haha[i]/=2;
    			sumi+=haha[i];
    	}
    	// if(sumi==0){
    	// 	cout<<cnt<<endl;
    	// 	continue;
    	// }
    	if(cnt!=0)
    		ans*=cnt;
    	//cout<<sumi<<endl;
    	ans*=mult[sumi];
    	ans%=mod;
    	rep(i,26){
    		ans*=invmult[haha[i]];
    		ans%=mod;
    	}
    	cout<<ans<<endl;
    }
    return 0;  
    
}