#include using namespace std; const int N = 100003; const long long MOD = 1000000007; long long fact[N]; long long ifact[N]; long long binpow(long long a, long long x) { if (x == 0) { return 1; } if (x % 2 == 0) { long long t = binpow(a, x/2); return t * t % MOD; } else { return a * binpow(a, x-1) % MOD; } } long long inverse(long long x) { return binpow(x, MOD-2); } int cnt[N+1][26]; void initialize(string s) { memset(cnt, 0, sizeof(cnt)); int n = s.length(); for (int i = 0; i < n; i++) { for (int j = 0; j < 26; j++) { cnt[i+1][j] = cnt[i][j]; } char c = s[i]; cnt[i+1][c-'a']++; } } int answerQuery(int l, int r) { int curr[26]; for (int i = 0; i < 26; i++) { curr[i] = cnt[r][i] - cnt[l-1][i]; } vector pairs; int tp = 0; int singles = 0; for (int i = 0; i < 26; i++) { //cerr << curr[i] << " "; int q = curr[i] / 2; pairs.push_back(q); tp += q; if (curr[i] % 2 == 1) { singles++; } } //cerr << endl; long long res = 1; if (singles > 0) { res = singles; } res = res * fact[tp] % MOD; for (int i = 0; i < pairs.size(); i++) { res = res * ifact[pairs[i]] % MOD; } return res; } int main() { string s; cin >> s; initialize(s); int q; cin >> q; fact[0] = 1; ifact[0] = 1; for (int i = 1; i < N; i++) { fact[i] = fact[i-1] * i % MOD; ifact[i] = inverse(fact[i]); } for(int a0 = 0; a0 < q; a0++){ int l; int r; cin >> l >> r; int result = answerQuery(l, r); cout << result << endl; } return 0; }