#include<bits/stdc++.h>
#include<vector>
#include<set>
#include<stack>
#include<queue>
#include<list>
#include<map>
#define ll long long
#define INF 2000000000
#define NINF -2000000000
#define M 1000000007
#define br '\n'
using namespace std;
char s[100002];
int sum[26][100002];

int fast_pow(long long base,long long n)
{
	if(n==0)
		return 1;
	if(n==1)
		return base;
	long long halfn=fast_pow(base,n/2);
	if(n%2==0)
		return(halfn*halfn)%M;
	else
		return(((halfn*halfn)%M)*base)%M;
}
int findMMI_fermat(int n)
{
	return fast_pow(n,M-2);
}
ll fact[100001];
void build()
{
	fact[0]=1;
	for(int i=1;i<=100000;i++)
	{
		fact[i]=(fact[i-1]*i)%M;
	}
}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	build();
	cin>>(s+1);
	for(int i=0;i<26;i++)
		sum[i][0]=0;
	for(int i=1;s[i];i++)
	{
		for(int j=0;j<26;j++)
		{
			sum[j][i]=sum[j][i-1];
		}
		sum[s[i]-'a'][i]++;
	}
	int q;
	cin>>q;
	int l,r;
	while(q--)
	{
		cin>>l>>r;
		ll num,den=1;
		int count[26];
		ll len=0;
		for(int i=0;i<26;i++)
		{
			count[i]=sum[i][r]-sum[i][l-1];
		}
		for(int i=0;i<26;i++)
		{
			den=(den*fact[(count[i]/2)])%M;
			len+=(count[i]/2);
		}
		num=fact[len];
		ll ans=(num * findMMI_fermat(den))%M;
		int odd=0;
		for(int i=0;i<26;i++)
		{
			if(count[i]%2)
				odd++;
		}
		if(odd!=0)
			ans=(ans*odd)%M;
		cout<<ans<<br;
	}
	return 0;
}