/*
*/

//#pragma GCC optimize("O3")
#define _CRT_SECURE_NO_WARNINGS
#include <fstream>
#include <iostream>
#include <string>
#include <complex>
#include <math.h>
#include <set>
#include <vector>
#include <map>
#include <queue>
#include <stdio.h>
#include <stack>
#include <algorithm>
#include <list>
#include <ctime>

#include <memory.h>
#include <assert.h>

#define y0 sdkfaslhagaklsldk

#define y1 aasdfasdfasdf
#define yn askfhwqriuperikldjk
#define j1 assdgsdgasghsf
#define tm sdfjahlfasfh
#define lr asgasgash
#define norm asdfasdgasdgsd
#define have adsgagshdshfhds
#define ends asdgahhfdsfshdshfd

#define eps 1e-8
#define M_PI 3.141592653589793
#define bsize 512

#define ldouble long double
using namespace std;

#define bs 1000000007

const int N = 600031;

string st;
int S[N][30];
long long fact[N],invf[N];

long long pw(long long a,long long b){
	if (b==0)
		return 1;
	if (b%2)
		return a*pw(a,b-1)%bs;
	return pw(a*a%bs,b/2);
}

long long inv(long long x){
	return pw(x,bs-2);
}

int tests;

vector<int> V;

long long C(long long n,long long m){
	long long res=fact[n]*invf[m];
	res%=bs;
	return res*invf[n-m]%bs;
}

int solver(vector<int> v){
	/*for (int i=0;i<v.size();i++){
		cout<<v[i]<<" ";
	}
	cout<<endl;
*/
	int max_len=0;
	int cnt_odd=0;
	for (int i=0;i<v.size();i++){
		max_len+=v[i]/2;
		cnt_odd+=v[i]%2;
	}
	long long res=1;
//	max_len/=2;
	for (int i=0;i<v.size();i++){
		res=res*C(max_len,v[i]/2);
		max_len-=v[i]/2;
		res%=bs;
	//	cout<<res<<" "<<max_len<<" "<<v[i]/2<<endl;
	}

	if (cnt_odd>0)
		res=(res*cnt_odd)%bs;
	return res;
}
int main(){
//	freopen("apache.in","r",stdin);
//	freopen("apache.out","w",stdout);
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	ios_base::sync_with_stdio(0);
//	cin.tie(0);

	cin>>st;
	cin>>tests;
	for (int i=1;i<=st.size();i++){
		for (int j=0;j<26;j++){
			S[i][j]=S[i-1][j];
			if (st[i-1]=='a'+j)
				S[i][j]++;
		}
	}

	fact[0]=1;
	for (int i=1;i<N;i++){
		fact[i]=fact[i-1]*i%bs;
	}

	invf[N-1]=inv(fact[N-1]);
	for (int i=N-2;i>=0;--i){
		invf[i]=invf[i+1]*(i+1);
		invf[i]%=bs;
	}

	for (;tests;--tests){
		int l,r;
		cin>>l>>r;
		V.clear();
		for (int i=0;i<26;i++){
			V.push_back(S[r][i]-S[l-1][i]);
		}
		long long res=solver(V);
		cout<<res<<endl;
	}

	cin.get(); cin.get();
	return 0;
}