#include /*每天在CF上刷B,C,D题各一道*/ #include #include #include #include #include #include #include #include #include #include #include #define INF 0x3f3f3f3f #define eps 1e-8 #define SIZE (100000+10) #define Ri(a) scanf("%d", &a) #define Rl(a) scanf("%I64d", &a) #define Rf(a) scanf("%lf", &a) #define Rs(a) scanf("%s", a) #define Pi(a) printf("%d\n", (a)) #define Pf(a) printf("%lf\n", (a)) #define Pl(a) printf("%I64d\n", (a)) #define Ps(a) printf("%s\n", (a)) #define CLR(a, b) memset(a, (b), sizeof(a)) #define INT_MAX 2147483647 #define LL_MAX 9223372036854775807 #define ll __int64 #define lson l, mid, rt<<1 #define rson mid+1, r, rt<<1|1 #define PI acos(-1.0) const int MOD = 9973; using namespace std; int n,cnt; char s[SIZE]; int tree[SIZE<<2]; void build(int l,int r,int rt) { if(l == r) { tree[rt] = s[cnt++]-28; // printf("%c %d\n",s[cnt-1],tree[rt]); return ; } int mid = (l+r)>>1; build(lson); build(rson); tree[rt] = tree[rt<<1]*tree[rt<<1|1]%MOD; } int query(int L,int R,int l,int r,int rt) { if(L<=l && R>=r) { return tree[rt]; } int mid = (l+r)>>1; int res = 1; if(L<=mid) res = res * query(L,R,lson) % MOD; if(R>mid) res = res * query(L,R,rson) % MOD; return res; } int main() { while( scanf("%d",&n) !=EOF) { getchar(); Rs(s); int len = strlen(s); cnt = 0; build(1,len,1); while(n--) { int l,r; Ri(l),Ri(r); Pi(query(l,r,1,len,1)); } } return 0; }