#include #define FOR(i, a, b) for (int i = a; i<= b; ++i) #define FORD(i, a, b) for (int i = a; i>=b; --i) #define REP(i, a) for (int i = 0; i #define next __next #define prev __prev #define __builtin_popcount __builtin_popcountll #define bit(S, i) (((S) >> i) & 1) #define IO cin.tie(NULL);cout.tie(NULL); #define taskname "" using namespace std; const long long MOD = 1e9 + 7; long long gt[N]; int cnt[N][26]; long long POW(long long a, long long k) { if (k == 0) return 1; long long t = POW(a, k >> 1); t = t * t % MOD; if (k % 2) t = t * a % MOD; return t; } void solve() { int l, r; cin >> l >> r; long long ans = 1; int odd = 0, total = 0; REP(i, 26) { int counter = cnt[r][i] - cnt[l - 1][i]; if (counter % 2) odd++; total += counter / 2; ans = (ans * POW(gt[counter / 2], MOD - 2)) % MOD; } ans = ans * gt[total] % MOD; if (odd) ans = (ans * odd) % MOD; cout << ans << '\n'; } int main() { IO; string st; cin >> st; int n = st.size(); st = '~' + st; gt[0] = 1; FOR(i, 1, n) gt[i] = gt[i - 1] * i % MOD; FOR(i, 1, n) { REP(j, 26) cnt[i][j] = cnt[i - 1][j]; cnt[i][st[i] - 'a']++; } int q; cin >> q; while (q--) solve(); }