# include using namespace std; typedef long long ll; typedef long double ld; typedef pair < int, int > pii; const int inf = (int)1e9 + 7; const int N = (int)2e5 + 7; string s; int p[N][26]; int f[N], rf[N]; int bpow(int x, int y){ if(!y){ return 1; } if(y & 1){ return bpow(x, y - 1) * 1ll * x % inf; } int z = bpow(x, y >> 1); return z * 1ll * z % inf; } int main(){ cin >> s; int n = (int)s.size(); f[0] = 1; for(int i = 1; i <= n; ++i){ f[i] = f[i - 1] * 1ll * i % inf; } rf[n] = bpow(f[n], inf - 2); for(int i = n - 1; i >= 0; --i){ rf[i] = rf[i + 1] * 1ll * (i + 1) % inf; } for(int i = 0; i < (int)s.size(); ++i){ p[i + 1][s[i] - 'a']++; for(int j = 0; j < 26; ++j){ p[i + 1][j] += p[i][j]; } } int q; cin >> q; for(int i = 1; i <= q; ++i){ int l, r; cin >> l >> r; int sum = 0, odd = 0; int dv = 1; for(int j = 0; j < 26; ++j){ int cnt = p[r][j] - p[l - 1][j]; sum += cnt / 2; odd += (cnt % 2 == 1); dv = dv * 1ll * rf[cnt / 2] % inf; } if(!odd){ int ans = f[sum]; ans = ans * 1ll * dv % inf; printf("%d\n", ans); continue; } int ans = f[sum]; ans = ans * 1ll * dv % inf; ans = ans * 1ll * odd % inf; printf("%d\n", ans); } return 0; }