#include<bits/stdc++.h>
using namespace std;
const int N=100011;
int root[11][2][N];
int nxt[N*10][5];
int sum[N*10];
int num,n;
char s[N];
void init()
{
	num=0;
	memset(root,0,sizeof(root));
	memset(nxt,0,sizeof(nxt));
	memset(sum,0,sizeof(sum));
}
void insert(char* s,int p,int np,int len)
{
	int w;
	for (int i=0;i<len;i++)
	{
		w=s[i]-'a';
		for (int j=0;j<5;j++) nxt[p][j]=nxt[np][j];
		nxt[p][w]=++num;
		p=nxt[p][w];np=nxt[np][w];
		sum[p]=sum[np]+1;
	}
	for (int i=0;i<5;i++) nxt[p][i]=nxt[np][i];
}
int qry(char *s,int p,int np,int len)
{	
	int ans,w;
	for (int i=0;i<len;i++)
	{
		w=s[i]-'a';
		p=nxt[p][w];np=nxt[np][w];
	}
	return sum[np]-sum[p];
}
void work()
{
	bool bo=false;
	init();n=strlen(s+1);
	for (int i=1;i<=n;i++)
	{
		bo=true;
		for (int len=1;len<=10;len++)
		{
			//cout<<i<<" "<<i+len-1<<" "<<i-len+1<<" "<<s[i+len-1]<<" "<<s[i-len+1]<<endl;
			if (i+len-1>n || i-len+1<1 || s[i+len-1]!=s[i-len+1]) bo=false;
			if (bo==true) root[len][1][i]=++num,insert(s+i,root[len][1][i],root[len][1][i-1],len);
			else root[len][1][i]=root[len][1][i-1];
		}
		bo=true;
		if (i>1)
		for (int len=1;len<=10;len++)
		{
			if (i+len-1>n || i-len  <1 || s[i+len-1]!=s[i-len])   bo=false;
			if (bo==true) root[len][0][i]=++num,insert(s+i,root[len][0][i],root[len][0][i-1],len);
			else root[len][0][i]=root[len][0][i-1];
		}
	}
	
	/*cout<<num<<endl;
	
	for (int i=1;i<=num;i++)
	{
		for (int j=0;j<5;j++) cout<<next[i][j]<<" ";cout<<sum[i]<<endl;
	}*/
	
	
	char a[20];
	int l,r,m,sz,ans=0;
	scanf("%d",&m);
	for (int i=1;i<=m;i++)
	{
		scanf("%d%d%s",&l,&r,a);
		sz=strlen(a);ans=0;
		for (int len=1;len<=10;len++)
		{
			if (r-len+1>l+len-1) ans+=qry(a,root[len][0][l+len-1],root[len][0][r-len+1],sz);
			if (r-len+1>l+len-2) ans+=qry(a,root[len][1][l+len-1-1],root[len][1][r-len+1],sz);
		}
		printf("%d\n",ans);
	}
}
int main()
{
	while (~scanf("%s",s+1)) work();
}
