#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100000 + 5
#define Mod 1000000007
#define SIGMA 26

int n, q, l, r, Cnt[N][SIGMA], A[SIGMA], Fac[N], Inv[N];
char s[N];

int main()
{
	scanf("%s", s + 1);
	n = strlen(s + 1);
	Fac[0] = Inv[0] = Fac[1] = Inv[1] = 1;
	for (int i = 2; i <= n; i ++)
	{
		Fac[i] = 1LL * Fac[i - 1] * i % Mod;
		Inv[i] = Mod - (1LL * Inv[Mod % i] * (Mod / i) % Mod);
	}
	for (int i = 2; i <= n; i ++)
		Inv[i] = 1LL * Inv[i - 1] * Inv[i] % Mod;
	for (int i = 1; i <= n; i ++)
	{
		for (int j = 0; j < SIGMA; j ++)
			Cnt[i][j] = Cnt[i - 1][j];
		Cnt[i][s[i] - 'a'] ++;
	}
	for (scanf("%d", &q); q; q --)
	{
		scanf("%d%d", &l, &r);
		int sum = 0, cnt_odd = 0, ans = 1;
		for (int i = 0; i < SIGMA; i ++)
		{
			A[i] = Cnt[r][i] - Cnt[l - 1][i];
			cnt_odd += (A[i] & 1);
			sum += (A[i] >> 1);
			ans = 1LL * ans * Inv[A[i] >> 1] % Mod;
		}
		ans = 1LL * ans * Fac[sum] % Mod;
		ans = 1LL * ans * max(cnt_odd, 1) % Mod;
		printf("%d\n", ans);
	}
	return 0;
}