/* ****Enigma27**** */ #include<bits/stdc++.h> #define ll long long #define pb push_back #define endl '\n' #define pll pair<ll int,ll int> #define vll vector<ll int> #define all(a) (a).begin(),(a).end() #define x first #define y second #define hell 1000000007 #define lbnd lower_bound #define ubnd upper_bound #define bs binary_search #define rep(i,a,b) for(ll i=a;ia<b;i++) #define gcd(a,b) __gcd((a),(b)) #define lcm(a,b) ((a)*(b)) / gcd((a),(b)) const double pi=3.141592653589793238462643383279502884197169399375105820974944; #define ios ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); using namespace std; #define N 100005 ll n,i,j,k,l,sum=0,flag=0,ans=0,q,a[26][N],r,fact[N]; string s; ll expo(ll base, ll exponent, ll mod) { //return base^exponent modulo modulus ll ans = 1; while(exponent !=0 ) { if((exponent&1) == 1) { ans = ans*base ; ans = ans%mod; } base = base*base; base %= mod; exponent>>= 1; } return ans%mod; } ll inv(ll x){ return expo(x,hell-2,hell); } int main() { //ios memset(a,0,sizeof a); fact[0]=1; for(i=1;i<N;i++){ fact[i]=(i*fact[i-1])%hell; } cin>>s; n=s.size(); for(i=0;i<n;i++){ a[s[i]-'a'][i+1]++; } for(i=0;i<26;i++){ for(j=1;j<=n;j++){ a[i][j]+=a[i][j-1]; } } cin>>q; while(q--){ ll odd=0,total=0; vll v; cin>>l>>r; for(i=0;i<26;i++){ ll k=(a[i][r]-a[i][l-1]); if(k&1) odd++,k--; total+=k/2; if(k/2) v.pb(k/2); } if(odd==0) odd=1; ll ans=fact[total]; ans=(ans*odd)%hell; for(auto j:v) ans=(ans*inv(fact[j]))%hell; v.clear(); cout<<ans<<endl; } return 0; }