#include #define rep(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 vlld; typedef pair plld; typedef map mlld; typedef set 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<