#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
#define MAX 1000000
typedef long int ll;
ll tree[4*MAX][27]={0};
char str[MAX+1];
void build_tree(int start, int end, ll idx)
{
if(start==end)
{
// cout<<idx<<endl;
int num= str[start]-97;
tree[idx][num]++;
return;
}
int mid= (start+end)/2;
build_tree(start,mid,1+2*idx);
build_tree(mid+1,end,2+2*idx);
// cout<<idx<<endl;
for(int i=0;i<26;i++)
tree[idx][i]= tree[2*idx+1][i] + tree[2*idx+2][i];
}
int query(int ss, int se, int qs, int qe, ll idx, char ele)
{
if(ss>=qs && se<=qe)
{
//cout<<ss<<" "<<se<<" "<<qs<<" "<<qe<<endl;
return tree[idx][ele-97];
}
if(ss>qe || se<qs)
return 0;
int mid= (ss+se)/2;
int p= query(ss,mid,qs,qe,1+2*idx,ele)+ query(mid+1,se,qs,qe,2+2*idx,ele);
// cout<<" for segment : "<<ss<<" "<<se<<" "<<p<<endl;
return p;
}
int main()
{
scanf("%s",str);
int len=strlen(str);
build_tree(0,len-1,0);
int i,j;
/*
for(i=0;i<7;i++)
{
for(j=0;j<26;j++)
{
if(tree[i][j]!=0)
{
//cout<<i<<" : "<<(char)(j+97)<<" "<<tree[i][j]<<endl;
}
}
}
*/
int low, high,que;
scanf("%d",&que);
while(que--){
char k;
cin>>k;
scanf("%d %d",&low,&high);
low--;
high--;
printf("%d\n",query(0,len-1,low,high,0,k));
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdHJpbmc+CiNpbmNsdWRlPHN0ZGlvLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIE1BWCAxMDAwMDAwCgp0eXBlZGVmIGxvbmcgaW50IGxsOwoKbGwgdHJlZVs0Kk1BWF1bMjddPXswfTsKY2hhciBzdHJbTUFYKzFdOwoKdm9pZCBidWlsZF90cmVlKGludCBzdGFydCwgaW50IGVuZCwgbGwgaWR4KQp7CglpZihzdGFydD09ZW5kKQoJewoJLy8JY291dDw8aWR4PDxlbmRsOwoJCWludCBudW09IHN0cltzdGFydF0tOTc7CgkJdHJlZVtpZHhdW251bV0rKzsKCQlyZXR1cm47Cgl9CglpbnQgbWlkPSAoc3RhcnQrZW5kKS8yOwoJYnVpbGRfdHJlZShzdGFydCxtaWQsMSsyKmlkeCk7CglidWlsZF90cmVlKG1pZCsxLGVuZCwyKzIqaWR4KTsKLy8JY291dDw8aWR4PDxlbmRsOwoJZm9yKGludCBpPTA7aTwyNjtpKyspCgkgdHJlZVtpZHhdW2ldPSB0cmVlWzIqaWR4KzFdW2ldICsgdHJlZVsyKmlkeCsyXVtpXTsKCSAKfQoKaW50IHF1ZXJ5KGludCBzcywgaW50IHNlLCBpbnQgcXMsIGludCBxZSwgbGwgaWR4LCBjaGFyIGVsZSkKewoJaWYoc3M+PXFzICYmIHNlPD1xZSkKCSB7CgkgCS8vY291dDw8c3M8PCIgIjw8c2U8PCIgIjw8cXM8PCIgIjw8cWU8PGVuZGw7CgkgCXJldHVybiB0cmVlW2lkeF1bZWxlLTk3XTsKCSB9CgkgCglpZihzcz5xZSB8fCBzZTxxcykKCXJldHVybiAwOwoJIAoJaW50IG1pZD0gKHNzK3NlKS8yOwoJaW50IHA9IHF1ZXJ5KHNzLG1pZCxxcyxxZSwxKzIqaWR4LGVsZSkrIHF1ZXJ5KG1pZCsxLHNlLHFzLHFlLDIrMippZHgsZWxlKTsKLy8JY291dDw8IiBmb3Igc2VnbWVudCA6ICI8PHNzPDwiICI8PHNlPDwiICI8PHA8PGVuZGw7CglyZXR1cm4gcDsKfQoKaW50IG1haW4oKQp7CglzY2FuZigiJXMiLHN0cik7CglpbnQgbGVuPXN0cmxlbihzdHIpOwoJCglidWlsZF90cmVlKDAsbGVuLTEsMCk7CglpbnQgaSxqOwoJLyoKCWZvcihpPTA7aTw3O2krKykKCXsKCQlmb3Ioaj0wO2o8MjY7aisrKQoJCXsKCQkJaWYodHJlZVtpXVtqXSE9MCkKCQkJewoJCQkJLy9jb3V0PDxpPDwiIDogIjw8KGNoYXIpKGorOTcpPDwiICI8PHRyZWVbaV1bal08PGVuZGw7CgkJCX0KCQl9Cgl9CgkqLwoJaW50IGxvdywgaGlnaCxxdWU7CglzY2FuZigiJWQiLCZxdWUpOwoJd2hpbGUocXVlLS0pewoJY2hhciBrOwoJY2luPj5rOwoJc2NhbmYoIiVkICVkIiwmbG93LCZoaWdoKTsKCWxvdy0tOwoJaGlnaC0tOwoJcHJpbnRmKCIlZFxuIixxdWVyeSgwLGxlbi0xLGxvdyxoaWdoLDAsaykpOwoJfQoJcmV0dXJuIDA7Cn0=