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

typedef long long ll;
#define mp make_pair
#define pub push_back
#define x first
#define y second
#define all(a) a.begin(), a.end()
#define db double

const int mod = (int)1e9 + 7;

int cnt[26][100007];

int getCnt(int v, int l, int r){
	if (l == 0) return cnt[v][r];
	return cnt[v][r] - cnt[v][l - 1];
}

int tmp[26];
int fac[100007];
int invfac[100007];

int bp(int a, int k){
	if (k == 1) return a;
	if (k % 2 == 1){
		return a * (ll)bp(a, k - 1) % mod;
	} else {
		int q = bp(a, k / 2);
		return q * (ll)q % mod;
	}
}

int main(){
   // freopen("input.txt", "r", stdin);
    //freopen("output2.txt", "w", stdout);
    ios_base::sync_with_stdio(0); cin.tie(0);
    fac[0] = 1;
    for (int i = 1; i < 100007; i++) fac[i] = fac[i - 1] * (ll)i % mod;
    for (int i = 0; i < 100007; i++) invfac[i] = bp(fac[i], mod - 2);
	string s;   
	cin >> s;
	for (int i = 0; i < s.size(); i++){
		if (i) for (int j = 0; j < 26; j++) cnt[j][i] += cnt[j][i - 1];
		cnt[s[i] - 'a'][i]++;
	}
	int q;
	cin >> q;
	while(q--){
		int l, r;
		cin >> l >> r;
		l--; r--;
		int ans = 0;

		for (int c = 0; c < 26; c++) tmp[c] = getCnt(c, l, r);
		int ww = 0;
		int len = 0;
		for (int c = 0; c < 26; c++){
			len += tmp[c] / 2;
			if (tmp[c] % 2 == 1) ww++;
		}

		ans = fac[len];
		for (int c = 0; c < 26; c++) ans = ans * (ll)invfac[tmp[c] / 2] % mod;

		if (ww > 0) ans = ans * (ll)ww % mod;

		cout << ans << "\n";
	}
}