#include using namespace std; typedef long long ll; #define mp make_pair #define pub push_back #define x first #define y second #define all(a) a.begin(), a.end() #define db double const int mod = (int)1e9 + 7; int cnt[26][100007]; int getCnt(int v, int l, int r){ if (l == 0) return cnt[v][r]; return cnt[v][r] - cnt[v][l - 1]; } int tmp[26]; int fac[100007]; int invfac[100007]; int bp(int a, int k){ if (k == 1) return a; if (k % 2 == 1){ return a * (ll)bp(a, k - 1) % mod; } else { int q = bp(a, k / 2); return q * (ll)q % mod; } } int main(){ // freopen("input.txt", "r", stdin); //freopen("output2.txt", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); fac[0] = 1; for (int i = 1; i < 100007; i++) fac[i] = fac[i - 1] * (ll)i % mod; for (int i = 0; i < 100007; i++) invfac[i] = bp(fac[i], mod - 2); string s; cin >> s; for (int i = 0; i < s.size(); i++){ if (i) for (int j = 0; j < 26; j++) cnt[j][i] += cnt[j][i - 1]; cnt[s[i] - 'a'][i]++; } int q; cin >> q; while(q--){ int l, r; cin >> l >> r; l--; r--; int ans = 0; for (int c = 0; c < 26; c++) tmp[c] = getCnt(c, l, r); int ww = 0; int len = 0; for (int c = 0; c < 26; c++){ len += tmp[c] / 2; if (tmp[c] % 2 == 1) ww++; } ans = fac[len]; for (int c = 0; c < 26; c++) ans = ans * (ll)invfac[tmp[c] / 2] % mod; if (ww > 0) ans = ans * (ll)ww % mod; cout << ans << "\n"; } }