#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; string s; int c[26][100010]; int MOD=1000000007; LL f[100010], inv[100010]; int power(int x, unsigned int y, unsigned int m) { if (y == 0) return 1; LL p = power(x, y/2, m) % m; p = (1LL * p * p) % m; return (y%2 == 0)? p : (1LL * x * p) % m; } int modInverse(int a, int m) { return power(a, m-2, m); } int main() { f[0]=1; inv[0]=1; for (int i=1;i<=100000;i++) { f[i]=1LL*f[i-1]*i; f[i]%=MOD; inv[i]=1LL*inv[i-1]*modInverse(i, MOD); inv[i]%=MOD; } cin>>s; memset(c,0,sizeof(c)); int n=s.size(); for (int i=0;i<26;i++) { c[i][0]=((s[0]-'a')==i); for (int j=1;j>q; while (q--) { scanf("%d%d",&l,&r); int ce=0, co=0; LL temp=1; for (int i=0;i<26;i++) { int diff=c[i][r-1]-(l<=1?0:c[i][l-2]); ce+=diff/2; co+=diff%2; temp*=1LL*inv[diff/2]; temp%=MOD; } LL ret=1LL*f[ce]; if (co>0) ret*=co; ret%=MOD; ret*=temp; ret%=MOD; cout<