#include<bits/stdc++.h>
#define reg register
#define i64 long long
using namespace std;
int read(){int x=0,f=0;char ch=0;while(!isdigit(ch))f|=(ch=='-'),ch=getchar();while(isdigit(ch))(x*=10)+=(ch^48),ch=getchar();return f?-x:x;}
void Ot(int x){if(x<0)putchar('-'),x=-x;if(x>=10)Ot(x/10);putchar(x%10+48);}
void Print(int x,char til='\n'){Ot(x);putchar(til);}
int Max(int x,int y){return x>y?x:y;}
int Min(int x,int y){return x<y?x:y;}
int Abs(int x){return x<0?-x:x;}
const int MAXN=2020;
//int f[33][MAXN];
int n;int a[MAXN];
char Gc(){char ch=0;while(!isalpha(ch))ch=getchar();return ch;}
signed main(){
#ifndef ONLINE_JUDGE
freopen("C:/Users/Administrator/Desktop/data.txt","r",stdin);
freopen("C:/Users/Administrator/Desktop/out.txt","w",stdout);
#endif
n=read();
for(reg int i=1;i<=n;i++)a[i]=Gc()-'a'+1;
/*for(reg int k=1;k<=26;k++)
for(reg int i=1;i<=n;i++){
reg int tot=0;
for(reg int j=i;j<=n;j++){
if(a[j]!=k)tot++;
f[k][tot]=Max(f[k][tot],j-i+1);
}
for(reg int i=1;i<=n;i++)f[k][i]=Max(f[k][i],f[k][i-1]);
}
for(reg int Q=read();Q;Q--){
reg int m=read(),p=Gc()-'a'+1;
Print(f[p][m]);
}*/
for(reg int Q=read();Q;Q--){
reg int k=read(),p=Gc()-'a'+1,ans=0;
reg int l=1,tot=0;
for(reg int i=1;i<=n;i++){
if(a[i]!=p)tot++;
while(tot>k){tot-=(a[l]!=p);l++;}
// printf("%d %d %d %c\n",l,i,tot,'a'+p-1);
ans=Max(ans,i-l+1);
}
Print(ans);
}
#ifndef ONLINE_JUDGE
fclose(stdin);fclose(stdout);
system("C:/Users/Administrator/Desktop/out.txt");
#endif
return 0;
}