#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 k; vector 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 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; }