#include<bits/stdc++.h>
#define mod ll(1e9+7)
#define sc(x) scanf("%d",&x)
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define endl '\n'
#define pc putchar_unlocked
#define gc getchar_unlocked
#define gx getchar
#define be(v) v.begin(),v.end()
#define mem(s,v) memset(s,v,sizeof(s))
#define fr(i,a,n) for(int i=a;i<n;i++)
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<int,int> pi;
typedef pair<int,ll> pil;
typedef pair<ll,ll> pll;
typedef vector<pll> vpll;
typedef vector<pil> vpil;
typedef vector<pi> vpii;
inline void print (int n) {int NN=n,rev,count=0;rev = NN;if(NN==0){pc('0');return;}while((rev%10)==0){count++;rev/=10;}rev=0;
while(NN!=0){rev=(rev<<3)+(rev<<1)+NN%10;NN/=10;}while (rev != 0) { pc(rev % 10 + '0'); rev /= 10;}while(count--)pc('0');}
inline void lprint(ll n){if(n<0LL){n=-n;pc('-');}int i=21;char o[21];do{o[--i]=(n%10LL)+'0';n/=10LL;}while(n);
do{pc(o[i]);}while(++i<21);}
inline void input(int& num){num=0;char c=gc();int flag=0;while(!((c>='0'&c<='9')||c=='-'))c=gc();if(c=='-'){flag=1;c=gc();}
while(c>='0'&&c<='9'){num=(num<<1)+(num<<3)+c-'0';c=gc();}if(flag==1)num=0-num;}
inline void linput(ll& num){num=0;char c=gc();int flag=0;while(!((c>='0'&c<='9')||c=='-'))c=gc();if(c=='-'){flag=1;c=gc();}
while(c>='0'&&c<='9'){num=(num<<1)+(num<<3)+c-'0';c=gc();}if(flag==1)num=0-num;}

inline void sscan(string  &a){char c=gx();while(c==' '||c=='\n')c=gx();while(c!='\n'&&c!=' '){a+=c;c=gx();}}
inline ll power(ll a,ll n,ll mod1) {ll b=a,ans=1;while(n){if(n&1) ans=(ans*b)%mod1; b=(b*b)%mod1; n>>=1;} return ans;}
int gcd(int a,int b){if(b==0)return a;else return(gcd(b,a%b));}


int main() {
    string s;
    cin >> s;
    int sz=s.size();
    int arr[sz+5][27];
    memset(arr,0,sizeof(arr));
    for(int i=1;i<=sz;i++)
    {
        for(int j=1;j<=26;j++)
        {
            arr[i][j]=arr[i-1][j];
        }
        arr[i][s[i-1]-96]++;
    }
    long fac[100005];
    fac[0]=1;
    for(int i=1;i<=100002;i++)
        fac[i]=(fac[i-1]*i)%mod;
    int q;
    cin>>q;
    while(q--)
    {
        int l,r,ans=0;
        cin>>l>>r;
        int tem[27]={0},len=0;
          for(int i=1;i<=26;i++)
          {
              if((arr[r][i]-arr[l-1][i])%2==1)
            { ans++;
            }
              tem[i]=(arr[r][i]-arr[l-1][i])/2;
              len+=tem[i];
          }   
         long div=1;
        for(int i=1;i<=26;i++)
        {
            if(tem[i]!=0)
            {
                div=(div*fac[tem[i]])%mod;
            }
        }
        div=power(div,mod-2,mod);
        long ans1;
        ans1=(fac[len]*div)%mod;
        if(ans!=0)
            ans1=(ans1*ans)%mod;
        cout<<ans1<<endl;
        
        
    }
    return 0;
}