#include #include #include #define FAST ios_base::sync_with_stdio(0); cin.tie(0); #define FOR(i, s, n) for (int i = s; i < n; i++) using namespace std; typedef long long ll; string s; int Q; const int MAX = 100001; int cnt[MAX][26]; int n; int MOD = (int)1e9 + 7; int fac[MAX]; int power (int num, int e) { ll res = 1; while(e) { if (e & 1) res = res * num % MOD; num = (int)(1ll * num * num % MOD); e >>= 1; } return (int)res; } int invv[MAX]; int inv (int num) {return power(num, MOD - 2);} int nCr (int n, int k) { return (1ll * fac[n] * invv[k] % MOD) * invv[n - k] % MOD; } int solve (vector cnts) { int odd = 0; int maxLen = 0; FOR (i, 0, 26) { odd += cnts[i] & 1; maxLen += cnts[i] >> 1; } ll res = max(1, odd); FOR (i, 0, 26) { res = res * nCr(maxLen, cnts[i] >> 1) % MOD, maxLen -= cnts[i] >> 1; } return (int)res; } int main() { FAST; fac[0] = fac[1] = 1; FOR (i, 2, MAX) fac[i] = (int)(1ll * fac[i - 1] * i % MOD); FOR (i, 0, MAX) invv[i] = inv(fac[i]); cin >> s; n = s.length(); FOR (i, 0, n) { if (i) FOR (j, 0, 26) cnt[i][j] = cnt[i - 1][j]; cnt[i][s[i] - 'a']++; } cin >> Q; while (Q--) { int l, r; cin >> l >> r; l--, r--; vector cntHere; FOR (i, 0, 26) cntHere.push_back(cnt[r][i]); if (l) FOR (i, 0, 26) cntHere[i] -= cnt[l - 1][i]; cout << solve(cntHere) << "\n"; } }