#include using namespace std; typedef long long ll; const int mod = 1000000007; const int Maxn = 100005; const int Maxl = 26; int fac[Maxn], inv[Maxn]; int freq[Maxn][Maxl]; int Inv(int x) { int res = 1; int p = mod - 2; while (p) { if (p & 1) res = ll(res) * x % mod; p >>= 1; x = ll(x) * x % mod; } return res; } int C(int n, int k) { if (n < 0 || k < 0 || k > n) return 0; return ll(fac[n]) * inv[k] % mod * inv[n - k] % mod; } void initialize(string s) { for (int i = 1; i <= s.length(); i++) { for (int j = 0; j < Maxl; j++) freq[i][j] = freq[i - 1][j]; freq[i][s[i - 1] - 'a']++; } } int answerQuery(int l, int r) { int odd = 0, tot = 0; for (int i = 0; i < Maxl; i++) { tot += (freq[r][i] - freq[l - 1][i]) / 2; odd += (freq[r][i] - freq[l - 1][i]) % 2; } int res = 1; if (odd > 0) res = ll(res) * odd % mod; for (int i = 0; i < Maxl; i++) { int my = (freq[r][i] - freq[l - 1][i]) / 2; res = ll(res) * C(tot, my) % mod; tot -= my; } return res; } int main() { fac[0] = inv[0] = 1; for (int i = 1; i < Maxn; i++) { fac[i] = ll(fac[i - 1]) * i % mod; inv[i] = Inv(fac[i]); } string s; cin >> s; initialize(s); int q; cin >> q; for(int a0 = 0; a0 < q; a0++){ int l; int r; cin >> l >> r; int result = answerQuery(l, r); cout << result << endl; } return 0; }