#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ll long long #define MODD 1000000007 using namespace std; int counts[30][111111]; int tmp[30]; ll modpow(ll x, ll y) { ll xs = x; ll answer = 1; while(y) { if (y&1) { answer = (answer * xs) % MODD; } y >>= 1; xs = (xs * xs) % MODD; } return answer; } ll fact[111111]; ll factinv[111111]; int main() { string S; cin>>S; for(int i=0;i0?counts[j][i-1]:0)+(S[i]-'a'==j); } } fact[0]=factinv[0]=1; for(int i=1;i<111111;i++) { fact[i]=(fact[i-1]*i)%MODD; factinv[i]=modpow(fact[i],MODD-2); } int Q; cin>>Q; for(int q=1;q<=Q;q++) { int L,R; cin>>L>>R; L--; R--; int no=0; int summ = 0; ll denom = 1; for(int i=0;i<26;i++) { tmp[i]=counts[i][R]-(L>0?counts[i][L-1]:0); //if (tmp[i]>0) // printf("%d,",tmp[i]); if (tmp[i]&1) { no++; tmp[i]--; } summ += tmp[i]/2; denom = (denom * factinv[tmp[i]/2])%MODD; } //printf("\n"); ll ans = fact[summ]*denom%MODD; if (no >= 1) ans = (ans * no)%MODD; cout << ans << endl; } }