#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
#define inf 0x3f3f3f3f
#define mod 1000000007ll
#define lowb(x) (x & (-x))
#define lson (id << 1)
#define rson (id << 1 | 1)
#define maxm 
#define maxn 
ll exgcd(ll a, ll b, ll &x, ll &y) {
    if (b == 0) {
        x = 1, y = 0;
        return a;
    }
    ll ans = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return ans;
}
ll inv(ll a, ll md) {
    ll x, y;
    exgcd(a, md, x, y);
    x = (x % md + md) % md;
    return x;
}
char a[100010];
int d[100010][26];
ll p[100010];
int main()
{
	int x, y, q;
	
	scanf("%s%d", a, &q);
	int n = strlen(a);
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j < 26; j++) {
			d[i][j] = d[i - 1][j];
		}
		d[i][a[i - 1] - 'a']++;
	}
	p[1] = p[0] = 1;
	for (int i = 2; i <= 100000; i++) {
		p[i] = p[i - 1] * i % mod;
	}
	while (q--) {
		scanf("%d%d", &x, &y);
		int tmp[30] = {0};
		ll s = 0, cc = 1;
		int fg = 0;
		for (int i = 0; i < 26; i++) {
			tmp[i] = d[y][i] - d[x - 1][i];
			s += tmp[i] / 2;
			if (tmp[i] & 1) fg++;
		//	printf("%d %lld\n", tmp[i], p[tmp[i]]);
			cc = cc * p[tmp[i] / 2] % mod;
	//		printf("%d\n", tmp[i]); 
		}
	//	printf("%lld %lld\n", s, cc);
		if (fg == 0) fg = 1;
		printf("%lld\n", p[s] * inv(cc, mod) % mod * fg % mod);
	}
}