#include<bits/stdc++.h>
#define rep(i,start,lim) for(lld i=start;i<lim;i++)
#define repd(i,start,lim) for(lld i=start;i>=lim;i--)
#define scan(x) scanf("%lld",&x)
#define print(x) printf("%lld ",x)
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define br printf("\n")
#define sz(a) lld((a).size())
#define YES printf("YES\n")
#define NO printf("NO\n")
#define all(c) (c).begin(),(c).end()
using namespace std;
#define INF         1011111111
#define LLINF       1000111000111000111LL
#define EPS         (double)1e-10
#define MOD         1000000007
#define PI          3.14159265358979323
using namespace std;
typedef long double ldb;
typedef long long lld;
lld powm(lld base,lld exp,lld mod=MOD) {lld ans=1;while(exp){if(exp&1) ans=(ans*base)%mod;exp>>=1,base=(base*base)%mod;}return ans;}
typedef vector<lld> vlld;
typedef pair<lld,lld> plld;
typedef map<lld,lld> mlld;
typedef set<lld> slld;
#define sync ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define endl '\n'
#define N 100005
#define fre freopen("1.in","r",stdin); freopen("1.out","w",stdout);
lld fact[N], invfact[N];
void fact_pre() {
  fact[0] = invfact[0] = 1;
  rep(i,1,N) fact[i] = (fact[i-1]*i)%MOD, invfact[i] = powm(fact[i],MOD-2);
}
lld nCr(lld n,lld r) {
  if(r>n) return 0;
  lld ans = fact[n] * invfact[r];
  ans %= MOD;
  ans = ans * invfact[n-r];
  ans %= MOD;
  return ans; 
}
lld freq[N][26];
int main()
{
  sync;
  fact_pre();
  string s;
  cin>>s;
  lld k = sz(s),q,l,r;
  s = " " + s;
  rep(i,1,k+1) freq[i][s[i]-'a']++;
  rep(i,1,k+1) rep(j,0,26) freq[i][j] += freq[i-1][j];
  cin>>q;
  while(q--) {
    cin>>l>>r;
    lld f[26];
    rep(i,0,26) f[i] = freq[r][i] - freq[l-1][i];
    lld cnt = 0, cntodd = 0, ans= 1;
    rep(i,0,26) {
      cnt += (f[i]/2);
      if(f[i]&1) cntodd++;
    }
    ans = fact[cnt];
    rep(i,0,26) {
      lld tmp = (f[i]/2);
      ans = (ans * invfact[tmp])%MOD;
    }
    if(cntodd>=1) {
      ans = (ans * cntodd)%MOD;
    }
    cout<<ans<<endl;
  }
  return 0;
}