#include <set>
#include <map>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <unordered_set>
#include <unordered_map>
#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;i<S.size();i++) {
        
        for(int j=0;j<26;j++) {
            counts[j][i]=(i>0?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;
        
        
        
        
        
        
        
        
        

        
    }
    
    
}