#include std::vector preInverse(int n, int md) { std::vector inv(n + 1); inv[1] = 1; for (int i = 2; i <= n; ++i) { inv[i] = (long long)(md - md / i) * inv[md % i] % md; } return inv; } struct Binomial { int n, md; std::vector factorial, inv_factorial; Binomial(int n, int mod) : n(n), md(mod) { factorial.resize(n + 1); inv_factorial = preInverse(n, md); factorial[0] = inv_factorial[0] = 1; for (int i = 1; i <= n; i++) { factorial[i] = (long long)factorial[i - 1] * i % md; inv_factorial[i] = (long long)inv_factorial[i - 1] * inv_factorial[i] % md; } } int choose(int n, int k) { if (k > n) return 0; return (long long)factorial[n] * inv_factorial[k] % md * inv_factorial[n - k] % md; } }; using namespace std; const int mod = 1e9 + 7; int main(int argc, char *argv[]) { string s; cin >> s; vector> a(s.size() + 1, vector(26)); for (int i = 1; i <= s.size(); i++) { a[i] = a[i - 1]; a[i][s[i - 1] - 'a']++; } Binomial bn(1e5 + 5, mod); int Q; cin >> Q; while (Q--) { int l, r; cin >> l >> r; vector cnt(26); int y = 0, S = 0; for (int i = 0; i < 26; i++) { cnt[i] = a[r][i] - a[l - 1][i]; S += cnt[i] / 2; if (cnt[i] & 1) y++; } long long ans = (y ? y : 1); for (int i = 0; i < 26; i++) { ans = ans * bn.choose(S, cnt[i] / 2) % mod; S -= cnt[i] / 2; } cout << ans << endl; } return 0; }