#include<bits/stdc++.h>
#define ll long long
using namespace std;
string s;
ll q,l,r,f[5005][5005],ck[5005][5005],n;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
freopen("CNTPAL.INP", "r", stdin);
freopen("CNTPAL.OUT", "w", stdout);
cin >> s;
n = s.size();
s = ' ' + s;
memset(f, 0, sizeof f);
for(int i = n; i >= 1; i--)
{
for(int j = i; j <= n; j++)
{
if(i == j) ck[i][j] = 1;
else
{
if(i == j - 1)
{
if(s[i] == s[j]) ck[i][j] = 1;
}
else
{
if(s[i] == s[j] && ck[i+1][j-1])
ck[i][j] = 1;
}
}
}
}
for(int i = n; i >= 1; i--)
{
for(int j = i; j <= n; j++)
{
if(i == j) f[i][j] = 1;
else
{
if(i == j - 1)
{
if(s[i] == s[j]) f[i][j] = 3;
else f[i][j] = 2;
}
else
{
f[i][j] = f[i+1][j] + f[i][j-1] - f[i+1][j-1];
if(s[i] == s[j] && ck[i+1][j-1])
f[i][j] += 1;
// else
// {
// f[i][j] = f[i+1][j-1];
// }
}
}
}
}
cin >> q;
while(q--)
{
cin >> l >> r;
cout << f[l][r] << '\n';
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RyaW5nIHM7CmxsIHEsbCxyLGZbNTAwNV1bNTAwNV0sY2tbNTAwNV1bNTAwNV0sbjsKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGZyZW9wZW4oIkNOVFBBTC5JTlAiLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIkNOVFBBTC5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICBjaW4gPj4gczsKICAgIG4gPSBzLnNpemUoKTsKICAgIHMgPSAnICcgKyBzOwogICAgbWVtc2V0KGYsIDAsIHNpemVvZiBmKTsKICAgIGZvcihpbnQgaSA9IG47IGkgPj0gMTsgaS0tKQogICAgewogICAgICAgIGZvcihpbnQgaiA9IGk7IGogPD0gbjsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgaWYoaSA9PSBqKSBja1tpXVtqXSA9IDE7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoaSA9PSBqIC0gMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZihzW2ldID09IHNbal0pIGNrW2ldW2pdID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZihzW2ldID09IHNbal0gJiYgY2tbaSsxXVtqLTFdKQogICAgICAgICAgICAgICAgICAgICAgICBja1tpXVtqXSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGkgPSBuOyBpID49IDE7IGktLSkKICAgIHsKICAgICAgICBmb3IoaW50IGogPSBpOyBqIDw9IG47IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKGkgPT0gaikgZltpXVtqXSA9IDE7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoaSA9PSBqIC0gMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZihzW2ldID09IHNbal0pIGZbaV1bal0gPSAzOwogICAgICAgICAgICAgICAgICAgIGVsc2UgZltpXVtqXSA9IDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZltpXVtqXSA9IGZbaSsxXVtqXSArIGZbaV1bai0xXSAtIGZbaSsxXVtqLTFdOwogICAgICAgICAgICAgICAgICAgIGlmKHNbaV0gPT0gc1tqXSAmJiBja1tpKzFdW2otMV0pCiAgICAgICAgICAgICAgICAgICAgICAgIGZbaV1bal0gKz0gMTsKLy8gICAgICAgICAgICAgICAgICAgIGVsc2UKLy8gICAgICAgICAgICAgICAgICAgIHsKLy8gICAgICAgICAgICAgICAgICAgICAgICBmW2ldW2pdID0gZltpKzFdW2otMV07Ci8vICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBjaW4gPj4gcTsKICAgIHdoaWxlKHEtLSkKICAgIHsKICAgICAgICBjaW4gPj4gbCA+PiByOwogICAgICAgIGNvdXQgPDwgZltsXVtyXSA8PCAnXG4nOwogICAgfQp9