#include #include #include using namespace std; #define N 100000 + 5 #define Mod 1000000007 #define SIGMA 26 int n, q, l, r, Cnt[N][SIGMA], A[SIGMA], Fac[N], Inv[N]; char s[N]; int main() { scanf("%s", s + 1); n = strlen(s + 1); Fac[0] = Inv[0] = Fac[1] = Inv[1] = 1; for (int i = 2; i <= n; i ++) { Fac[i] = 1LL * Fac[i - 1] * i % Mod; Inv[i] = Mod - (1LL * Inv[Mod % i] * (Mod / i) % Mod); } for (int i = 2; i <= n; i ++) Inv[i] = 1LL * Inv[i - 1] * Inv[i] % Mod; for (int i = 1; i <= n; i ++) { for (int j = 0; j < SIGMA; j ++) Cnt[i][j] = Cnt[i - 1][j]; Cnt[i][s[i] - 'a'] ++; } for (scanf("%d", &q); q; q --) { scanf("%d%d", &l, &r); int sum = 0, cnt_odd = 0, ans = 1; for (int i = 0; i < SIGMA; i ++) { A[i] = Cnt[r][i] - Cnt[l - 1][i]; cnt_odd += (A[i] & 1); sum += (A[i] >> 1); ans = 1LL * ans * Inv[A[i] >> 1] % Mod; } ans = 1LL * ans * Fac[sum] % Mod; ans = 1LL * ans * max(cnt_odd, 1) % Mod; printf("%d\n", ans); } return 0; }