#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll mod = 1e9 + 7;

int pre[26][100010];
ll fact[100010], inv[100010];


ll power(ll b, ll e) {
	ll c = 1;
	while(e) {
		if(e&1LL)	c = (c*b)%mod;
		b = (b*b)%mod;
		e /= 2LL;
	}
	return c;
}

ll C(int n, int k) {
	if(k > n or  n < 0 or k > n)	return 0;
	ll ans = fact[n];
	ans = (ans*inv[k])%mod;
	ans = (ans*inv[n - k])%mod;
	return ans;
}

int main() {
	/* Enter your code here. Read input from STDIN. Print output to STDOUT */   
	string s;
	int i, j, n, q;
	fact[0] = inv[0] = 1;
	for(i = 1; i <= 1e5; ++i) {
		fact[i] = (fact[i - 1] * i)%mod;
		inv[i] = power(fact[i], mod - 2);
	}
	cin >> s;
	n = s.length();
	for(i = 0; i < n; ++i) {
		if(i) {
			for(j = 0; j < 26; ++j)
				pre[j][i] = pre[j][i - 1];
		}
		pre[s[i] - 'a'][i]++;
	}
	cin >> q;
	while(q--) {
		int l, r;
		cin >> l >> r;
		int cnt[26];
		l--, r--;
		for(i = 0; i < 26; ++i) {
			if(l)	cnt[i] = pre[i][r] - pre[i][l - 1];
			else	cnt[i] = pre[i][r];
		}
		int maxl = 0, isOdd = 0, p = 0;
		for(i = 0; i < 26; ++i) {
			if(cnt[i]%2) {
				isOdd = 1;
				p++;
				maxl += cnt[i] - 1;
			}
			else	maxl += cnt[i];
		}
		maxl += isOdd;
		int k = maxl/2;
		ll ans = 1;
		for(i = 0; i < 26; ++i) {
			ans = (ans * C(k, cnt[i]/2)) % mod;
			k -= cnt[i]/2;
		}
		if(isOdd)	ans = (ans * p)%mod;
		cout << ans << "\n";
	}
	return 0;
}