#include <bits/stdc++.h>
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define lp(i,a,n) for(int i=a;i<=n;++i)
#define lpd(i,a,n) for(int i=a;i>=n;--i)
#define mem(a,b) memset(a,b,sizeof a)
#define all(v) v.begin(),v.end()
#define println(a) cout <<(a) <<endl
#define sz(x) ((int)(x).size())
#define readi(x) scanf("%d",&x)
#define read2i(x,y) scanf("%d%d",&x,&y)
#define read3i(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define mod 1000000007
#define eps 1e-8
#define infi 1000000000
#define infll 1000000000000000000ll
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ll> vll;
typedef set<int> si;
typedef map<int,int> mii;

const int N = 100002;
int n,q,f[N][26];
char a[N];
ll fact[N];

ll power(ll x, ll y){
    if(!y) return 1;
    ll sq = power(x, y/2);
    sq = sq * sq % mod;
    if(y&1) sq = sq * x % mod;
    return sq;
}

int main(){
    scanf("%s", a);
    n = strlen(a);

    f[0][a[0]-'a'] = 1;
    lp(i,1,n-1){
        lp(j,0,25) f[i][j] = f[i-1][j];
        f[i][a[i]-'a']++;
    }

    fact[0] = 1;
    lp(i,1,N-1) fact[i] = fact[i-1] * i % mod;

    readi(q);
    while(q--){
        int l,r;
        read2i(l,r);
        --l, --r;

        int freq[26];
        lp(j,0,25) freq[j] = f[r][j] - (l ? f[l-1][j] : 0);

        int odd = 0, len = 0;
        lp(j,0,25) odd += freq[j]&1, len += freq[j] / 2;
        odd = max(odd, 1);

        ll ans = fact[len] * odd % mod;
        lp(j,0,25) if(freq[j]/2) ans = ans * power(fact[freq[j]/2], mod-2) % mod;
        cout <<ans <<endl;
    }
}

/*
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
*/