#include #include #include #include #include #include #define MAXN 100006 #define MOD 9973 using namespace std; struct segtree { int l; int r; int hash; }; segtree b[4*MAXN]; int N; char s[MAXN]; int v[MAXN]; int ans=0; void build(int i,int x,int y) { if(x>y)return; b[i].l=x; b[i].r=y; if(x==y) { b[i].hash=v[x]; return; } int m=(x+y)>>1; int lch=i+i,rch=i+i+1; build(lch,x,m); build(rch,m+1,y); b[i].hash=b[lch].hash*b[rch].hash%MOD; } int query(int i,int x,int y) { if(b[i].l>=x && b[i].r<=y) return b[i].hash; int tmp=1; int lch=i+i,rch=i+i+1; if(b[lch].r>=x)tmp=tmp*query(lch,x,y)%MOD; if(b[rch].l<=y)tmp=tmp*query(rch,x,y)%MOD; return tmp; } void solve() { while(scanf("%d",&N)==1) { memset(s,0,sizeof(s)); memset(v,0,sizeof(v)); memset(b,0,sizeof(b)); getchar(); gets(s); int len=strlen(s); for(int i=0;i0 && y<=len)ans=query(1,x,y); printf("%d\n",ans); } } } int main() { //freopen("A.in","r",stdin); //freopen("A.out","w",stdout); solve(); return 0; }