#include using namespace std; #define fi first #define se second #define pb push_back //#define FILE #define taskname "" #define taski taskname".in" #define tasko taskname".out" typedef long long ll; typedef unsigned int uint; const long long M = 1e9 + 7; const int N = 1e5 + 5; long long n, fact[N], o[N], b[N], a[N][26], q; string s; long long c(int n, int k) { return fact[n] * o[k] % M * o[n - k] % M; } long long solve(int l, int r) { int b[26]; for(int i = 0; i < 26; i++) if(l == 0) b[i] = a[r][i]; else b[i] = a[r][i] - a[l - 1][i]; int even = 0; int sum = 0; for(int i = 0; i < 26; i++) { if(b[i] % 2 == 1) even++; sum += b[i] / 2; } long long result = 1; if(even != 0) result = even; int rest = sum; for(int i = 0; i < 26; i++) { result *= c(rest, b[i] / 2); //cout << rest << endl; //cout << c(rest, b[i] / 2) << endl; rest -= b[i] / 2; result %= M; //cout << b[i] << " " << i << " " << result << endl; } return result; } long long Pow(long long a, long long x) { // if(a < 5 && a > 1) // cout << a << " " << x << endl; if(x == 0) return 1; long long t = Pow(a, x / 2); if(x % 2 == 0) return t * t % M; //cout << "Kek" << endl; return t * t % M * a % M; } int main() { ios:: sync_with_stdio(false); #ifdef HOME freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #elif defined(FILE) freopen(taski, "r", stdin); freopen(tasko, "w", stdout); #endif fact[0] = 1; for(int i = 1; i < N; i++) fact[i] = fact[i - 1] * i % M; for(int i = 0; i < N; i++) o[i] = Pow(fact[i], M - 2); // for(int i = 0; i < 5; i++) // cout << i << ": " << fact[i] << " " << o[i] << endl; cin >> s; n = s.size(); a[0][s[0] - 'a']++; for(int i = 1; i < n; i++) { for(int j = 0; j < 26; j++) a[i][j] = a[i - 1][j]; a[i][s[i] - 'a']++; } cin >> q; for(int i = 0; i < q; i++) { int l, r; cin >> l >> r; l--;r--; cout << solve(l, r) << "\n"; } return 0; }