#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 5e3 + 5;
int n, q;
string s;
bool dp[N][N]; // dp[l][r] = true/false = Xâu con s[l..r] có phải là xâu đối xứng hay không
ll sum[N][N];
void precompute() {
for (int l = 1; l <= n; l++) {
dp[l][l] = 1;
if (l + 1 <= n) dp[l][l + 1] = (s[l] == s[l + 1]);
}
for (int l = n; l >= 1; l--) {
for (int r = l + 2; r <= n; r++) {
dp[l][r] = (s[l] == s[r]) & dp[l + 1][r - 1];
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + dp[i][j];
}
}
int getSum(int x1, int y1, int x2, int y2) {
return sum[x2][y2] - sum[x1 - 1][y2] - sum[x2][y1 - 1] + sum[x1 - 1][y1 - 1];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> s >> q;
n = s.size();
s = ' ' + s;
precompute();
while (q--) {
int l, r;
cin >> l >> r;
ll ans = getSum(l, l, r, r);
cout << ans << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSA1ZTMgKyA1OyAKCmludCBuLCBxOyAgCnN0cmluZyBzOyAgCgpib29sIGRwW05dW05dOyAvLyBkcFtsXVtyXSA9IHRydWUvZmFsc2UgPSBYw6J1IGNvbiBzW2wuLnJdIGPDsyBwaOG6o2kgbMOgIHjDonUgxJHhu5FpIHjhu6luZyBoYXkga2jDtG5nCmxsIHN1bVtOXVtOXTsgCgp2b2lkIHByZWNvbXB1dGUoKSB7Cglmb3IgKGludCBsID0gMTsgbCA8PSBuOyBsKyspIHsKCQlkcFtsXVtsXSA9IDE7ICAKCQlpZiAobCArIDEgPD0gbikgZHBbbF1bbCArIDFdID0gKHNbbF0gPT0gc1tsICsgMV0pOyAKCX0KCglmb3IgKGludCBsID0gbjsgbCA+PSAxOyBsLS0pIHsKCQlmb3IgKGludCByID0gbCArIDI7IHIgPD0gbjsgcisrKSB7CgkJCWRwW2xdW3JdID0gKHNbbF0gPT0gc1tyXSkgJiBkcFtsICsgMV1bciAtIDFdOyAKCQl9Cgl9CgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKSBzdW1baV1bal0gPSBzdW1baSAtIDFdW2pdICsgc3VtW2ldW2ogLSAxXSAtIHN1bVtpIC0gMV1baiAtIDFdICsgZHBbaV1bal07IAoJfQp9CgppbnQgZ2V0U3VtKGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikgewoJcmV0dXJuIHN1bVt4Ml1beTJdIC0gc3VtW3gxIC0gMV1beTJdIC0gc3VtW3gyXVt5MSAtIDFdICsgc3VtW3gxIC0gMV1beTEgLSAxXTsgCn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBzID4+IHE7IAoJbiA9IHMuc2l6ZSgpOyAgCglzID0gJyAnICsgczsgIAoKCXByZWNvbXB1dGUoKTsgIAoKCXdoaWxlIChxLS0pIHsKCQlpbnQgbCwgcjsgCgkJY2luID4+IGwgPj4gcjsKCQlsbCBhbnMgPSBnZXRTdW0obCwgbCwgciwgcik7CgkJY291dCA8PCBhbnMgPDwgJ1xuJzsgCgl9Cn0=