//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;
}
