#include <bits/stdc++.h>
#define	int			long long
#define ll          long long
#define pb          push_back
#define pii         pair<int,int>
#define vi          vector<int>
#define vii 		vector<pii>
#define mi 			map<int,int>
#define mii			map<int,pii>	
#define all(a)      (a).begin(),(a).end()
#define x           first
#define y           second
#define sz(x)       (int)x.size()
#define hell        1000000007
#define endl        '\n'
#define rep(i,a,b)	for(int i=a;i<b;i++)
using namespace std;
int expo(int base, int exponent, int mod) {								//return base^exponent modulo modulus
    int ans = 1;
    while(exponent !=0 ) {
        if((exponent&1) == 1) {
            ans = ans*base ;
            ans = ans%mod;
        }
        base = base*base;
        base %= mod;
        exponent>>= 1;
    }
    return ans%mod;
}
int q,v[100005][26],fac[100005];
mi inv;
void solve()
{
	string s;
	cin>>s;
	cin>>q;
	int n=sz(s);
	v[0][s[0]-'a']=1;
	rep(i,1,n){
		rep(j,0,26)
			v[i][j]=v[i-1][j];
		v[i][s[i]-'a']++;
	}
	fac[0]=1;
	rep(i,1,100005)
		fac[i]=(i*fac[i-1])%hell;
	rep(i,1,100005)
		inv[fac[i]]=expo(fac[i],hell-2,hell);
	while(q--)
	{
		int l,r;
		cin>>l>>r;
		l--,r--;
		int odds=0,ans=1,f[26]={0};
		rep(i,0,26){
			f[i]=v[r][i]-(l?v[l-1][i]:0);
			if(f[i]%2) odds++;
			f[i]/=2;
		}
		int s=0;
		rep(i,0,26){
			s+=f[i];
			ans=(ans*inv[fac[f[i]]])%hell;
		}
		ans=(ans*fac[s])%hell;
		if(odds)
		ans=(ans*odds)%hell;
		cout<<ans<<endl;
	}	
}

signed main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t=1;
//	cin>>t;
	while(t--)
		solve();
	return 0;
}