//Date : 02 - 01 - 18 #include #include #include #include #include #include #include #include #include #include #include #define ll long long #define For(i,n) for(int i=0;i b ? a : b) ;} char s[MAX]; int a[26][MAX] ,size[26]; ll p[N]; const int mod = 1e9 + 7; int lsrch(int a[],int x ,int p ,int r) { int q ; while(p <= r) { q = (p + r) / 2; if(a[q] >= x) r = q - 1; else p = q + 1; } return r + 1; } int rsrch(int a[],int x ,int p ,int r) { int q; while(p <= r) { q = (p + r) / 2; if(a[q] <= x) p = q + 1; else r = q - 1; } return p - 1; } int main(){ scanf("%s" ,s); int n = strlen(s); For(i ,n) a[s[i] - 'a'][size[s[i] - 'a']++] = i; p[1] = 1; rep(i ,2 ,N - 1) p[i] = 1LL* p[i - 1] * i % mod; int Q ,l ,r ,x ,sum ,nn ,odd; ll ans; s(Q); while(Q--){ scanf("%d %d" ,&l ,&r); l-- ,r--; sum = 0; odd = 0; For(i ,26){ int lin = lsrch(a[i] ,l ,0 ,size[i] - 1); int rin = rsrch(a[i] ,r ,0 ,size[i] - 1); if(rin >= lin) x = (rin - lin + 1); if(x & 1) sum += (x - 1) / 2 ,odd++; else sum += x / 2; } nn = r - l + 1; if(nn & 1) ans = 1LL * p[(nn - 1) / 2] * odd % mod; else ans = p[nn / 2]; printf("%lld\n" ,ans); } return 0; }