#include using namespace std; const int64_t MOD = 1000000007; const int maxn = 100002; int n, ps[maxn][26], a[maxn]; string s; int64_t fact[maxn]; int64_t POW(int64_t n, int64_t k) { if (k==0) return 1; int64_t tmp = POW(n, k/2); return k%2 ? tmp*tmp%MOD*n%MOD : tmp*tmp%MOD; } int main() { //freopen("rotator.inp", "r", stdin); ios::sync_with_stdio(0); cin.tie(0); cin >> s; int n = s.size(); s = '@' + s; for (int i=1; i<=n; ++i) { for (int j=0; j<26; ++j) { ps[i][j] = ps[i-1][j] + (s[i]-'a'==j); } } fact[0] = 1; for (int i=1; i<=n; ++i) fact[i] = fact[i-1]*i%MOD; int nQuery; cin >> nQuery; while (nQuery--) { int l, r; cin >> l >> r; int odd=0, len=0; for (int i=0; i<26; ++i) { a[i] = ps[r][i] - ps[l-1][i]; odd += a[i]%2; len += (a[i]-a[i]%2); } if (odd>0) ++len; int64_t res = fact[len/2]; for (int i=0; i<26; ++i) res = (res*POW(fact[a[i]/2], MOD-2))%MOD; if (len%2!=0) res = (res*odd)%MOD; cout << res << '\n'; } }