#include using namespace std; typedef long long ll; const ll mod = 1e9 + 7; int pre[26][100010]; ll fact[100010], inv[100010]; ll power(ll b, ll e) { ll c = 1; while(e) { if(e&1LL) c = (c*b)%mod; b = (b*b)%mod; e /= 2LL; } return c; } ll C(int n, int k) { if(k > n or n < 0 or k > n) return 0; ll ans = fact[n]; ans = (ans*inv[k])%mod; ans = (ans*inv[n - k])%mod; return ans; } int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ string s; int i, j, n, q; fact[0] = inv[0] = 1; for(i = 1; i <= 1e5; ++i) { fact[i] = (fact[i - 1] * i)%mod; inv[i] = power(fact[i], mod - 2); } cin >> s; n = s.length(); for(i = 0; i < n; ++i) { if(i) { for(j = 0; j < 26; ++j) pre[j][i] = pre[j][i - 1]; } pre[s[i] - 'a'][i]++; } cin >> q; while(q--) { int l, r; cin >> l >> r; int cnt[26]; l--, r--; for(i = 0; i < 26; ++i) { if(l) cnt[i] = pre[i][r] - pre[i][l - 1]; else cnt[i] = pre[i][r]; } int maxl = 0, isOdd = 0, p = 0; for(i = 0; i < 26; ++i) { if(cnt[i]%2) { isOdd = 1; p++; maxl += cnt[i] - 1; } else maxl += cnt[i]; } maxl += isOdd; int k = maxl/2; ll ans = 1; for(i = 0; i < 26; ++i) { ans = (ans * C(k, cnt[i]/2)) % mod; k -= cnt[i]/2; } if(isOdd) ans = (ans * p)%mod; cout << ans << "\n"; } return 0; }