#include #define mod 1000000007 using namespace std; string x; int dp[26][100001]; int fact[100001]; int ifact[100001]; int fast(int base, int exp){ int res = 1; while(exp){ if(exp & 1) res = (res * 1LL * base) % mod; exp = exp >> 1; base = (base * 1LL * base) % mod; } return res; } int main(){ cin >> x; for(int i = 1 ; i <= x.size() ; ++i){ dp[x[i - 1] - 'a'][i] = 1; } int n = x.size(); fact[0] = ifact[0] = 1; for(int i = 1 ; i <= n; ++i) fact[i] = i * 1LL * fact[i - 1] % mod, ifact[i] = fast(fact[i], mod - 2); for(int j = 0 ; j < 26 ; ++j) for(int i = 1 ; i <= x.size() ; ++i) dp[j][i] += dp[j][i - 1]; int q; cin >> q; while(q--){ int l, r; cin >> l >> r; int sum = 0; int odd = 0; int ways = 1; for(int i = 0 ; i < 26 ; ++i){ int times = dp[i][r] - dp[i][l - 1]; sum += (times/2); if(times % 2 != 0) odd += 1; ways = (ways * 1LL * ifact[times/2]) % mod; } ways = (ways *1LL* fact[sum]) % mod; if(odd == 0) odd = 1; ways = (ways * 1LL * odd) % mod; cout << ways << endl; } }