#include using namespace std; int cnt[100010][26]; constexpr int MOD = 1e9 + 7; using ll = long long; ll fact[100010]; ll pow_mod(ll a, ll b) { ll ans = 1; while (b > 0) { if (b & 1) ans = ans * a % MOD; a = a * a % MOD; b >>= 1; } return ans; } void initialize(string s) { // This function is called once before all queries. for (int i = 0; i < s.length(); ++ i) { if (i > 0) for (int j = 0; j < 26; ++ j) cnt[i][j] = cnt[i - 1][j]; ++ cnt[i][s[i] - 'a']; } fact[0] = 1; for (int i = 1; i <= s.length(); ++ i) fact[i] = fact[i - 1] * i % MOD; } int answerQuery(int l, int r) { // Return the answer for this query modulo 1000000007. ll len = 0, odd = 0, ans = 1; for (int j = 0; j < 26; ++ j) { int tmp = cnt[r][j] - (l == 0 ? 0 : cnt[l - 1][j]); len += tmp / 2 * 2; if (tmp % 2 == 1) ++ odd; ans = ans * pow_mod(fact[tmp / 2], MOD - 2) % MOD; } if (odd) { return odd * fact[len / 2] % MOD * ans % MOD; } else return fact[len / 2] * ans % MOD; } int main() { string s; cin >> s; initialize(s); int q; cin >> q; for(int a0 = 0; a0 < q; a0++){ int l; int r; cin >> l >> r; -- l, -- r; int result = answerQuery(l, r); cout << result << endl; } return 0; }