#include #include #include using namespace std; const int maxn=100005; int seg[maxn<<2]; char str[maxn]; const int mod=9973; void pushup(int node) { seg[node]=((seg[node<<1])%mod*(seg[node<<1|1])%mod)%mod; } void build(int node ,int l,int r) { if(l==r) { seg[node]=str[l-1]-28; return; } int mid=(l+r)>>1; build(node<<1,l,mid); build(node<<1|1,mid+1,r); pushup(node); } int query(int node,int L,int R,int b,int e) { if(L<=b&&e<=R) { return seg[node]; } int mid=(b+e)>>1; int ans=1; if(L<=mid) ans=(ans%mod*(query(node<<1,L,R,b,mid)%mod))%mod; if(R>mid) ans=(ans%mod*(query(node<<1|1,L,R,mid+1,e)%mod))%mod; return ans; } int main() { int n; int ans=0; while(~scanf("%d",&n)){ scanf("%s",str); int len=strlen(str); build(1,1,len); while(n--) { int a,b; scanf("%d%d",&a,&b); if(a<1||a>len||b<1||b>len) { printf("%d\n",ans); continue; } ans=query(1,a,b,1,len); printf("%d\n",ans); } } return 0; }