#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); */