#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
int lp[1000007];
char a[1000007];
int b[1000007];
long long int bb[27][1000007];
long long int fact[1000007];
long long int factm[1000007];
int prime()
{
	long long int i,j;
	for(i=2;i<=1e6;i++)
	{
		if(lp[i])
			continue;
		for(j=i*i;j<=1e6;j=j+i)
			if(!lp[j])
				lp[j]=i;
		lp[i]=i;
	}
	return 0;
}
long long int exp(long long int a,long long int b)
{
	long long int tem=1;
	while(b)
	{
		if(b%2)
			tem=(tem*a)%1000000007;
		a=(a*a)%1000000007;
		b=b/2;
	}
	return tem;
}
int main()
{
	int i,j;
	fact[0]=1;
	factm[0]=1;
	for(i=1;i<=1e5;i++)
		fact[i]=(fact[i-1]*i)%1000000007,factm[i]=exp(fact[i],1000000005);
	scanf("%s",a+1);
	int aa;
	scanf("%d",&aa);
	for(i=1;a[i];i++)
		bb[a[i]-'a'][i]++;
	for(i=0;i<26;i++)
		for(j=1;a[j];j++)
			bb[i][j]=bb[i][j]+bb[i][j-1];
	for(i=0;i<aa;i++)
	{
		int l,r;
		scanf("%d %d",&l,&r);
		for(j=0;j<26;j++)
			b[j]=bb[j][r]-bb[j][l-1];
		int ans=0;
		int anss=0;
		int ansss;
		for(j=0;j<26;j++)
		{
			ans=ans+b[j]/2;
			anss=anss+b[j]%2;
		}
		ansss=fact[ans];
		for(j=0;j<26;j++)
		{
			ansss=(1LL*ansss*factm[b[j]/2])%1000000007;
		}
		ansss=(1LL*ansss*max(anss,1))%1000000007;
		printf("%d\n",ansss);
	}
	return 0;
}