#include using namespace std; typedef long long int ll; #define fastio() ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll mod = 1000000007; int d,x,y; void extendedEuclid(int A, int B) { if(B == 0) { d = A; x = 1; y = 0; } else { extendedEuclid(B, A%B); int temp = x; x = y; y = temp - (A/B)*y; } } int modInverse(int A, int M) { extendedEuclid(A,M); return (x%M+M)%M; //x may be negative } int main() { fastio() //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); ll fact[100005]; fact[0] = fact[1] = 1; for (int i = 2;i<=100000;i++) fact[i] = ( fact[i-1]*i )%mod; string s; cin>>s; int freq[100005][26] = {0}; for (int i = 1;i<=s.size();i++) { for (int j = 0;j<26;j++) freq[i][j] = freq[i-1][j]; freq[i][ s[i-1] - 'a' ]++; } int l,r,q; ll ans = 1; cin>>q; while (q--) { cin>>l>>r; int temp[26]; for(int i = 0;i<26;i++) temp[i] = freq[r][i] - freq[l-1][i]; int one = 0,two = 0; for (int i = 0;i<26;i++) { if ( temp[i] == 1 ) one++; else if ( temp[i] >= 2 ) { two += temp[i]/2; if ( temp[i] % 2 != 0 ) one++; } } ans = ( fact[two] * max(1,one) )%mod; for (int i = 0;i<26;i++) { if ( temp[i] >= 2 ) { ll ex = fact[temp[i]/2]; ans = ( ans * modInverse(ex, mod))%mod; } } cout<