#include #include int tree[400000]; char str[100000]; void build(int node,int begin,int end){ if (begin == end){ tree[node] = str[begin]-28; } else{ build(2*node,begin,(begin+end)/2); build(2 * node+1, (begin + end) / 2+1,end); tree[node] = (tree[2 * node] * tree[2 * node + 1]) % 9973; } } int compute(int node, int begin, int end, int left, int right){ int p1, p2; if (left > end || right < begin) return -1; if (begin >= left && end <= right) return tree[node]; p1 = compute(2 * node, begin, (begin + end) / 2,left,right); p2 = compute(2 * node + 1, (begin + end) / 2 + 1, end, left, right); if (p1 == -1) return p2; if (p2 == -1) return p1; return (p1*p2) % 9973; } int main(){ int n, a, b,len; while (scanf("%d\n", &n)!=EOF){ gets(str); len=strlen(str); build(1, 0, len - 1); while (n--){ scanf("%d%d", &a, &b); printf("%d\n",compute(1,1,len,a,b)); } } return 0; }