#include using namespace std; #define MOD 1000000007 int n, m, cnt[100005][26], ta, tb, tc, td, te; char x[100005]; long long fac[100005], inv[100005], ans; vector< int > v; long long po(long long b, int p) { long long re = 1; while (p) { if (p % 2) re = re * b % MOD; b = b * b % MOD; p /= 2; } return re; } long long ncr(int a, int b) { return fac[a] * inv[b] % MOD * inv[a - b] % MOD; } int main() { fac[0] = inv[0] = 1; for (int i = 1; i < 100005; i++) inv[i] = po(fac[i] = fac[i - 1] * i % MOD, MOD - 2); scanf("%s", x); for (; x[n]; n++) { memcpy(cnt[n + 1], cnt[n], 4 * 26); cnt[n + 1][x[n] -= 'a']++; } scanf("%d", &m); while (m--) { td = te = 0; ans = 1; v.clear(); scanf("%d%d", &ta, &tb); for (int i = 0; i < 26; i++) { tc = cnt[tb][i] - cnt[ta - 1][i]; v.push_back(tc / 2); td += tc / 2; te += tc % 2; } if (te) ans = te; for (int i = 0; i < v.size(); i++) { ans = ans * ncr(td, v[i]) % MOD; td -= v[i]; } printf("%lld\n", ans); } return 0; }