#include #include #include #include using namespace std; char s[100009]; struct node{ int l; int r; int mult; }T[400009]; int ans=1; void build(int l,int r,int k){ if(l==r){ T[k].l=l; T[k].r=r; T[k].mult=1; return ; } int mid; mid=(l+r)/2; T[k].l=l; T[k].r=r; T[k].mult=1; build(l,mid,2*k); build(mid+1,r,2*k+1); } void insertt(int x,int i,int k){ if(T[k].l==T[k].r &&T[k].l==i){ T[k].mult=T[k].mult*(x-28)%9973; return; } int mid; mid=(T[k].l+T[k].r)/2; if(i<=mid)insertt(x,i,2*k); else insertt(x,i,2*k+1); T[k].mult=T[2*k].mult*T[2*k+1].mult%9973; } void searcht(int l,int r,int k){ int mid; if(T[k].l==l&&T[k].r==r){ ans=ans*T[k].mult%9973; return; } mid=(T[k].l+T[k].r)/2; if(r<=mid)searcht(l,r,2*k); else if(l>mid)searcht(l,r,2*k+1); else{ searcht(l,mid,2*k); searcht(mid+1,r,2*k+1); } } int main(){ int n,i,j,a,b,len,pre; while(scanf("%d",&n)!=EOF){ scanf("%s",s+1); len=strlen(s+1); build(1,len,1); for(i=1;i<=len;i++){ insertt(s[i],i,1); } for(i=1;i<=n;i++){ scanf("%d%d",&a,&b); if(a<1||b<1||a>len||b>len){ printf("%d\n",pre); } else{ ans=1; searcht(a,b,1); cout<