//#pragma comment(linker, "/STACK:102400000,102400000") #include #include #include #include #include #include #include #include #include #include using namespace std; #define MZ(array) memset(array, 0, sizeof(array)) #define MF1(array) memset(array, -1, sizeof(array)) #define MINF(array) memset(array, 0x3f, sizeof(array)) #define REP(i,n) for(i=0;i<(n);i++) #define FOR(i,x,n) for(i=(x);i<=(n);i++) #define FORD(i,x,y) for(i=(x);i>=(y);i--) #define RD(x) scanf("%d",&x) #define RD2(x,y) scanf("%d%d",&x,&y) #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z) #define WN(x) printf("%d\n",x); #define RE freopen("D.in","r",stdin) #define WE freopen("huzhi.txt","w",stdout) #define MP make_pair #define PB push_back #define PF push_front #define PPF pop_front #define PPB pop_back typedef long long LL; typedef unsigned long long ULL; const double PI=acos(-1.0); const double EPS=1e-10; const int MAXN=1111; const int MOD=9973; int n; int a[MAXN],b[MAXN]; char s[111111]; int l; int q[111111]; int ql; void init() { int i,j; ql=sqrt(l); int qll = l/ql; REP(i,qll) { q[i]=1; int ed = (i+1)*ql - 1; FOR(j,i*ql,ed) { q[i]*=s[j]; q[i]%=MOD; } } } int gank(int a,int b) { if(a==b)return s[a]; int sti=ceil(1.0*a/ql), edi=b/ql; int st = sti*ql; int ed = edi*ql; int i; int re=1; if(ed