#include #include #include #include #include #include #include using namespace std; const int mod = 9973; struct tree1 { int left; int right; int z; }tree[400005]; char s[100005]; void init(int inst,int l,int r) { tree[inst].left=l; tree[inst].right=r; if(l==r) { tree[inst].z=s[l-1]-28; return ; } int mid=(l+r)>>1; init(2*inst,l,mid); init(2*inst+1,mid+1,r); tree[inst].z=tree[2*inst].z*tree[2*inst+1].z%mod; } int query(int inst,int l,int r) { if(tree[inst].left==l&&tree[inst].right==r) { return tree[inst].z; } int mid=(tree[inst].left+tree[inst].right)>>1; if(r<=mid) return query(2*inst,l,r); else if(l>mid) return query(2*inst+1,l,r); else return query(2*inst,l,mid)*query(2*inst+1,mid+1,r)%mod; } int res; int main() { int n; while(scanf("%d",&n)!=EOF) { scanf("%s",s); int len=strlen(s); init(1,1,len); while(n--) { int l,r; scanf("%d%d",&l,&r); if(l>len||r>len) { printf("%d\n",res); continue; } res=query(1,l,r); printf("%d\n",res); } } }