//NiceDuck
#include "bits/stdc++.h"
typedef long long ll;
using namespace std;
#define FILE "000"
#define foru(i,a,b) for(int i=(int)(a); i<=(int)(b); ++i)
#define ford(i,a,b) for(int i=(int)(a); i>=(int)(b); --i)
#define fastio ios_base::sync_with_stdio(0);cin.tie(0);
#define pb push_back
#define fi first
#define se second
#define el "\n"
#define MASK(i) (1LL<<(i))
#define BIT(i,j) (((i)>>(j))&1)
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define LOG 20
const ll MAX=5e4+4;
int n,q;
string str,rev;
const ll BASE=67, MOD1=1e9+7, MOD2=1561023067;
struct Hash
{
vector<ll> h1,h2,p1,p2;
Hash(string s)
{
int l=s.size()-1;
h1.assign(l+2,0);
h2.assign(l+2,0);
p1.assign(l+2,0);
p2.assign(l+2,0);
p1[0]=p2[0]=1;
foru(i,1,l)
{
p1[i]=(p1[i-1]*BASE)%MOD1;
p2[i]=(p2[i-1]*BASE)%MOD2;
h1[i]=(h1[i-1]*BASE + (s[i]-'a'))%MOD1;
h2[i]=(h2[i-1]*BASE + (s[i]-'a'))%MOD2;
}
}
pair<ll,ll> getHash(int l, int r)
{
ll x=(h1[r]-h1[l-1]*p1[r-l+1]+MOD1*MOD1)%MOD1, y=(h2[r]-h2[l-1]*p2[r-l+1]+MOD2*MOD2)%MOD2;
return make_pair(x,y);
}
};
ll f[5003][5003];
//void pre()
//{
// foru(i,1,n) f[i][i]=1;
// foru(i,1,n-1)
// {
// f[i][i+1]=2;
// if(str[i]==str[i+1]) f[i][i+1]++;
// }
// ford(l,n-2,1)
// {
// foru(r,l+2,n)
// {
// f[l][r]=f[l][r-1]+f[l+1][r]-f[l+1][r-1];
// int l1=n-r+1, r1=n-l+1;
// pair<ll,ll> pa1=hs1.getHash(l,r), pa2=hs2.getHash(l1,r1);
// if(pa1.fi==pa2.fi && pa1.se==pa2.se) ++f[l][r];
// }
// }
//}
int main()
{
fastio
if(fopen(FILE ".inp","r"))
{
freopen(FILE ".inp","r",stdin); freopen(FILE ".out","w",stdout);
}
cin>>str;
n=str.size();
ford(i,str.size()-1,0) rev+=str[i];
str=" "+str;
rev=" "+rev;
Hash hs1(str), hs2(rev);
foru(i,1,n) f[i][i]=1;
foru(i,1,n-1)
{
f[i][i+1]=2;
if(str[i]==str[i+1]) f[i][i+1]++;
}
ford(l,n-2,1)
{
foru(r,l+2,n)
{
f[l][r]=f[l][r-1]+f[l+1][r]-f[l+1][r-1];
int l1=n-r+1, r1=n-l+1;
pair<ll,ll> pa1=hs1.getHash(l,r), pa2=hs2.getHash(l1,r1);
if(pa1.fi==pa2.fi && pa1.se==pa2.se) ++f[l][r];
}
}
cin>>q;
while(q--)
{
int l,r; cin>>l>>r;
cout<<f[l][r]<<el;
}
return 0;
}
Ly9OaWNlRHVjawojaW5jbHVkZSAiYml0cy9zdGRjKysuaCIKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgRklMRSAiMDAwIgojZGVmaW5lIGZvcnUoaSxhLGIpIGZvcihpbnQgaT0oaW50KShhKTsgaTw9KGludCkoYik7ICsraSkKI2RlZmluZSBmb3JkKGksYSxiKSBmb3IoaW50IGk9KGludCkoYSk7IGk+PShpbnQpKGIpOyAtLWkpCiNkZWZpbmUgZmFzdGlvIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTsKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBNQVNLKGkpICgxTEw8PChpKSkKI2RlZmluZSBCSVQoaSxqKSAoKChpKT4+KGopKSYxKQojZGVmaW5lIFRJTUUgMS4wKmNsb2NrKCkvQ0xPQ0tTX1BFUl9TRUMKI2RlZmluZSBMT0cgMjAKCmNvbnN0IGxsIE1BWD01ZTQrNDsKaW50IG4scTsKc3RyaW5nIHN0cixyZXY7Cgpjb25zdCBsbCBCQVNFPTY3LCBNT0QxPTFlOSs3LCBNT0QyPTE1NjEwMjMwNjc7CnN0cnVjdCBIYXNoCnsKICAgIHZlY3RvcjxsbD4gaDEsaDIscDEscDI7CiAgICBIYXNoKHN0cmluZyBzKQogICAgewogICAgICAgIGludCBsPXMuc2l6ZSgpLTE7CiAgICAgICAgaDEuYXNzaWduKGwrMiwwKTsKICAgICAgICBoMi5hc3NpZ24obCsyLDApOwogICAgICAgIHAxLmFzc2lnbihsKzIsMCk7CiAgICAgICAgcDIuYXNzaWduKGwrMiwwKTsKICAgICAgICBwMVswXT1wMlswXT0xOwogICAgICAgIGZvcnUoaSwxLGwpCiAgICAgICAgewogICAgICAgICAgICBwMVtpXT0ocDFbaS0xXSpCQVNFKSVNT0QxOwogICAgICAgICAgICBwMltpXT0ocDJbaS0xXSpCQVNFKSVNT0QyOwogICAgICAgICAgICBoMVtpXT0oaDFbaS0xXSpCQVNFICsgKHNbaV0tJ2EnKSklTU9EMTsKICAgICAgICAgICAgaDJbaV09KGgyW2ktMV0qQkFTRSArIChzW2ldLSdhJykpJU1PRDI7CiAgICAgICAgfQogICAgfQogICAgcGFpcjxsbCxsbD4gZ2V0SGFzaChpbnQgbCwgaW50IHIpCiAgICB7CiAgICAgICAgbGwgeD0oaDFbcl0taDFbbC0xXSpwMVtyLWwrMV0rTU9EMSpNT0QxKSVNT0QxLCB5PShoMltyXS1oMltsLTFdKnAyW3ItbCsxXStNT0QyKk1PRDIpJU1PRDI7CiAgICAgICAgcmV0dXJuIG1ha2VfcGFpcih4LHkpOwogICAgfQp9OwoKbGwgZls1MDAzXVs1MDAzXTsKLy92b2lkIHByZSgpCi8vewovLyAgICBmb3J1KGksMSxuKSBmW2ldW2ldPTE7Ci8vICAgIGZvcnUoaSwxLG4tMSkKLy8gICAgewovLyAgICAgICAgZltpXVtpKzFdPTI7Ci8vICAgICAgICBpZihzdHJbaV09PXN0cltpKzFdKSBmW2ldW2krMV0rKzsKLy8gICAgfQovLyAgICBmb3JkKGwsbi0yLDEpCi8vICAgIHsKLy8gICAgICAgIGZvcnUocixsKzIsbikKLy8gICAgICAgIHsKLy8gICAgICAgICAgICBmW2xdW3JdPWZbbF1bci0xXStmW2wrMV1bcl0tZltsKzFdW3ItMV07Ci8vICAgICAgICAgICAgaW50IGwxPW4tcisxLCByMT1uLWwrMTsKLy8gICAgICAgICAgICBwYWlyPGxsLGxsPiBwYTE9aHMxLmdldEhhc2gobCxyKSwgcGEyPWhzMi5nZXRIYXNoKGwxLHIxKTsKLy8gICAgICAgICAgICBpZihwYTEuZmk9PXBhMi5maSAmJiBwYTEuc2U9PXBhMi5zZSkgKytmW2xdW3JdOwovLyAgICAgICAgfQovLyAgICB9Ci8vfQoKaW50IG1haW4oKQp7CiAgICBmYXN0aW8KICAgIGlmKGZvcGVuKEZJTEUgIi5pbnAiLCJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbihGSUxFICIuaW5wIiwiciIsc3RkaW4pOyBmcmVvcGVuKEZJTEUgIi5vdXQiLCJ3IixzdGRvdXQpOwogICAgfQogICAgY2luPj5zdHI7CiAgICBuPXN0ci5zaXplKCk7CiAgICBmb3JkKGksc3RyLnNpemUoKS0xLDApIHJldis9c3RyW2ldOwogICAgc3RyPSIgIitzdHI7CiAgICByZXY9IiAiK3JldjsKICAgIEhhc2ggaHMxKHN0ciksIGhzMihyZXYpOwogICAgZm9ydShpLDEsbikgZltpXVtpXT0xOwogICAgZm9ydShpLDEsbi0xKQogICAgewogICAgICAgIGZbaV1baSsxXT0yOwogICAgICAgIGlmKHN0cltpXT09c3RyW2krMV0pIGZbaV1baSsxXSsrOwogICAgfQogICAgZm9yZChsLG4tMiwxKQogICAgewogICAgICAgIGZvcnUocixsKzIsbikKICAgICAgICB7CiAgICAgICAgICAgIGZbbF1bcl09ZltsXVtyLTFdK2ZbbCsxXVtyXS1mW2wrMV1bci0xXTsKICAgICAgICAgICAgaW50IGwxPW4tcisxLCByMT1uLWwrMTsKICAgICAgICAgICAgcGFpcjxsbCxsbD4gcGExPWhzMS5nZXRIYXNoKGwsciksIHBhMj1oczIuZ2V0SGFzaChsMSxyMSk7CiAgICAgICAgICAgIGlmKHBhMS5maT09cGEyLmZpICYmIHBhMS5zZT09cGEyLnNlKSArK2ZbbF1bcl07CiAgICAgICAgfQogICAgfQogICAgY2luPj5xOwogICAgd2hpbGUocS0tKQogICAgewogICAgICAgIGludCBsLHI7IGNpbj4+bD4+cjsKICAgICAgICBjb3V0PDxmW2xdW3JdPDxlbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=