#include using namespace std; typedef long long ll; typedef pair pii; typedef vector vi; #define inf 0x3f3f3f3f #define mod 1000000007ll #define lowb(x) (x & (-x)) #define lson (id << 1) #define rson (id << 1 | 1) #define maxm #define maxn ll exgcd(ll a, ll b, ll &x, ll &y) { if (b == 0) { x = 1, y = 0; return a; } ll ans = exgcd(b, a % b, y, x); y -= a / b * x; return ans; } ll inv(ll a, ll md) { ll x, y; exgcd(a, md, x, y); x = (x % md + md) % md; return x; } char a[100010]; int d[100010][26]; ll p[100010]; int main() { int x, y, q; scanf("%s%d", a, &q); int n = strlen(a); for (int i = 1; i <= n; i++) { for (int j = 0; j < 26; j++) { d[i][j] = d[i - 1][j]; } d[i][a[i - 1] - 'a']++; } p[1] = p[0] = 1; for (int i = 2; i <= 100000; i++) { p[i] = p[i - 1] * i % mod; } while (q--) { scanf("%d%d", &x, &y); int tmp[30] = {0}; ll s = 0, cc = 1; int fg = 0; for (int i = 0; i < 26; i++) { tmp[i] = d[y][i] - d[x - 1][i]; s += tmp[i] / 2; if (tmp[i] & 1) fg++; // printf("%d %lld\n", tmp[i], p[tmp[i]]); cc = cc * p[tmp[i] / 2] % mod; // printf("%d\n", tmp[i]); } // printf("%lld %lld\n", s, cc); if (fg == 0) fg = 1; printf("%lld\n", p[s] * inv(cc, mod) % mod * fg % mod); } }