#include <bits/stdc++.h>

using namespace std;

#define fi first
#define se second
#define pb push_back
//#define FILE

#define taskname ""
#define taski taskname".in"
#define tasko taskname".out"

typedef long long ll;
typedef unsigned int uint;

const long long M = 1e9 + 7;
const int N = 1e5 + 5;

long long n, fact[N], o[N], b[N], a[N][26], q;
string s;

long long c(int n, int k)
{
	return fact[n] * o[k] % M * o[n - k] % M;
}

long long solve(int l, int r)
{
	int b[26];
	for(int i = 0; i < 26; i++)
		if(l == 0)
			b[i] = a[r][i];
		else
			b[i] = a[r][i] - a[l - 1][i];
	int even = 0;
	int sum = 0;
	for(int i = 0; i < 26; i++)
	{
		if(b[i] % 2 == 1)
			even++;
		sum += b[i] / 2;
	}
	long long result = 1;
	if(even != 0)
		result = even;
	int rest = sum;
	for(int i = 0; i < 26; i++)
	{
		result *= c(rest, b[i] / 2);
		//cout << rest << endl;
		//cout << c(rest, b[i] / 2) << endl;
		rest -= b[i] / 2;
		result %= M;
		//cout << b[i] << " " << i << " " << result << endl;
	}
	return result;
}

long long Pow(long long a, long long x)
{
//	if(a < 5 && a > 1)
//		cout << a << " " << x << endl;
	if(x == 0)
		return 1;
	long long t = Pow(a, x / 2);
	if(x % 2 == 0)
		return t * t % M;
	//cout << "Kek" << endl;
	return t * t % M * a % M;
}

int main()
{
	ios:: sync_with_stdio(false);
	#ifdef HOME
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	#elif defined(FILE)
	freopen(taski, "r", stdin);
	freopen(tasko, "w", stdout);
	#endif

	fact[0] = 1;
	for(int i = 1; i < N; i++)
		fact[i] = fact[i - 1] * i % M;
	for(int i = 0; i < N; i++)
		o[i] = Pow(fact[i], M - 2);
//	for(int i = 0; i < 5; i++)
//		cout << i << ": " << fact[i] << " " << o[i] << endl;
	cin >> s;
	n = s.size();
	a[0][s[0] - 'a']++;
	for(int i = 1; i < n; i++)
	{
		for(int j = 0; j < 26; j++)
			a[i][j] = a[i - 1][j];
		a[i][s[i] - 'a']++;
	}
	cin >> q;
	for(int i = 0; i < q; i++)
	{
		int l, r;
		cin >> l >> r;
		l--;r--;
		cout << solve(l, r) << "\n";
	}
	return 0;
}