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

#define MOD 1000000007
class Combination {
	long long int ppow(long long int i, long long int j) {
		long long int res = 1LL;
		while (j) {
			if ((j & 1LL)) {
				res *= i;
				if (res >= MOD) {
					res %= MOD;
				}
			}
			j >>= 1;
			i *= i;
			if (i >= MOD) {
				i %= MOD;
			}
		}
		return res;
	}
public:
	vector<long long int> k;
	vector<long long int> r;
	void resize(int N) {
		k.resize(N + 2);
		r.resize(N + 2);
		k[0] = 1;
		for (int i = 1; i < N + 2; i++) {
			k[i] = k[i - 1];
			k[i] *= i;
			if (k[i] >= MOD)k[i] %= MOD;
		}
		long long int al = k[k.size() - 1];
		long long int iv = ppow(k[k.size() - 1], MOD - 2);
		r[k.size() - 1] = iv;
		for (int i = (int)(r.size()) - 2; i >= 0; i--) {
			r[i] = r[i + 1] * (i + 1);
			if (r[i] >= MOD) {
				r[i] %= MOD;
			}
		}
	}
	long long int C(int a, int b) {
		if (a < b)return 0;
		long long int up = k[a];
		long long int dw = r[b] * r[a - b];
		dw %= MOD;
		up *= dw;
		up %= MOD;
		return up;
	}
	long long int H(int a, int b) {
		return C(a + b - 1, b);
	}
	long long int catalan_number(int n) {
		return (C(2 * n, n) + MOD - C(2 * n, n - 1)) % MOD;
	}
};

#define MAX 100002
char buf[MAX];
string s;

int cnt[MAX][26];

int q;
Combination c;

int main() {
	scanf("%s", buf);
	s = buf;
	for (int i = 0; i < s.size(); i++) {
		cnt[i][s[i] - 'a']++;
		for (int j = 0; j < 26; j++) {
			if (i) {
				cnt[i][j] += cnt[i - 1][j];
			}
		}
	}
	c.resize(100002);
	cin >> q;
	while (q--) {
		int l, r;
		scanf("%d%d", &l, &r);
		int one = 0;
		vector<int> v;
		int sum = 0;
		l--;
		r--;
		for (int i = 0; i < 26; i++) {
			int cn = cnt[r][i];
			if (l) {
				cn -= cnt[l - 1][i];
			}
			if (cn % 2) {
				one++;
				cn--;
			}
			sum += cn/2;
			v.push_back(cn / 2);
		}
		long long int way = max(one, 1);
		for (int i = 0; i < v.size(); i++) {
			way *= c.C(sum, v[i]);
			sum -= v[i];
			way %= MOD;
		}
		printf("%lld\n", way);
	}
	return 0;
}