#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define MAX 5007usingnamespace std;char s[MAX];int n,q,dp[MAX][MAX];int isPar[MAX][MAX];int check (int l ,int r ){if( l == r )return1;if( s[l]!= s[r])return0;if( r-l ==1)return1;if( isPar[l+1][r-1])return1;return0;}int main (){while(cin >> s)
{int n = strlen ( s );
memset ( isPar ,0,sizeof( isPar ));for(int i =0; i < n ; i++)
dp[i][i]=1;for(int i =0; i < n ; i++)for(int j =0; j+i < n ; j++){int k = j+i;
isPar[j][k]= check ( j , k );}for(int i =1; i < n ; i++){for(int j =0; j+i <n ; j++){int k = j+i;
dp[j][k]= dp[j][k-1]+ dp[j+1][k];if( i >1)
dp[j][k]-= dp[j+1][k-1];
dp[j][k]+= isPar[j][k];}}
scanf ("%d",&q );while( q--){int l,r;
scanf ("%d%d",&l ,&r );
l--,r--;
printf ("%d\n", dp[l][r]);}}}