#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <list>
#include <utility>
#include <iterator>
#include <map>
#include <stack>
#include <queue>
#include <set>
#include <deque>
#include <bitset>
#include <complex>
#include <iomanip>
#include <random>

using namespace std;

#define pb push_back
#define f first
#define s second
#define mp make_pair
#define SZ(x) ((int)(x.size()))
#define FOI(i, a, n) for(int i = int(a); i <= int(n); i++)
#define FOD(i, a, n) for(int i = int(a); i >= int(n); i--)
#define IN(x, y) ((y).find(x) != (y).end())
#define sync ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);

typedef long long ll;
typedef long double lf;
typedef pair < int, ll > ii;

const int NMAX = 1e5+4;
const ll MOD = 1e9 + 7;

ll x,y;
template<class T> T gcd(T a,T b){if(a==0) {x=0,y=1; return b;}T gc=gcd(b%a,a);T temp;temp=x;x=y-(b/a)*temp;y=temp;return gc;}//y is the inverse and a is modulus and define x & y

ll po(ll a, ll x,ll m){ if(x==0){return 1;}ll ans=1;ll k=1;  while(k<=x) {if(x&k){ans=((ans*a)%m);} k<<=1; a*=a; a%=m; }return ans; } //(a^x)%m



int pre[27][NMAX];
ll fact[NMAX];
ll inve[NMAX];

void cal()
{
    fact[0] = inve[0]=1;
    fact[1] = inve[1] =1;
    FOI(i,2,NMAX-1)
    {
        fact[i] = (fact[i-1]*i)%MOD;
        gcd(MOD,fact[i]);
        y+=MOD;
        inve[i] = y%MOD;
    }
}

int main()
{
    sync
    string s;
    cin>>s;
    cal();
    int l = s.size();
    FOI(i,0,l-1)
    pre[s[i]-97][i+1] = 1;
    FOI(i,0,25)
    FOI(j,1,l)
    pre[i][j] += pre[i][j-1];
    
    
    int q;
    cin>>q;
    while(q--)
    {
        int l,r;
        cin>>l>>r;
        int cn1 = 0;
        int cn2 = 0;
        FOI(i,0,25)
        {
            cn1 += (pre[i][r] - pre[i][l-1])%2;
            cn2 +=(pre[i][r] - pre[i][l-1])/2;
        }
        ll ans = fact[cn2];
        FOI(i,0,25)
        {
            cn2 =(pre[i][r] - pre[i][l-1])/2;
            ans *= inve[cn2];
            ans%= MOD;
        }
        if(cn1!=0)
        ans*= cn1;
        ans%= MOD;
        cout<<ans<<endl;
    }
    
}