QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#874845#897. 基本子串字典2020HZ06AC ✓1972ms454108kbC++144.2kb2025-01-28 18:06:192025-01-28 18:06:20

Judging History

This is the latest submission verdict.

  • [2025-01-28 18:06:20]
  • Judged
  • Verdict: AC
  • Time: 1972ms
  • Memory: 454108kb
  • [2025-01-28 18:06:19]
  • Submitted

answer

#include<bits/stdc++.h> 
using namespace std;
#define ll long long
#define ull unsigned long long
#define pb push_back
const int N=200005,m=127,P=1000007,p=131;
const ull mod=212370440130137957ll;
int n,q;
char s[N];
ull W[2],pw[N];
mt19937_64 rd(time(0));
inline int get(int x,int l){return (x-1)/l+1;}
inline int L(int x,int l){return (x-1)*l+1;}
inline int R(int x,int l){return min(n,x*l);}
struct seq{//等差数列
	int st=0,ed=0,d=0;//首项、末项、公差
	seq seg(int l,int r){//提取
		l=max(l,st),r=min(r,ed);
		if(!st) return {0,0,0};
		if(!d){
			if(l==st&&r==st) return {st,ed,0};
			return {0,0,0};
		}
		if(l>r) return {0,0,0};
		l=(l-st+d-1)/d*d+st,r=(r-st)/d*d+st;
        if(l>r) return {0,0,0};
		return {l,r,l==r?0:d};
	}
	int len(){return d?(ed-st)/d+1:st>0;}//项数
	bool in(int p){return p>=st&&p<=ed&&(d?(p-st)%d==0:(st&&p==st));}//是否出现
};
void upd(seq &a,int p){//更新
	if(!a.st) a.st=p;
	else if(!a.d) a.d=p-a.st;
	a.ed=p;
}
seq merge(seq a,seq b){//合并
	seq res;
	if(a.len()==1&&b.len()==1&&a.st<b.ed) res.d=b.ed-a.st;
	else res.d=max(a.d,b.d);
	res.st=a.st?a.st:b.st,res.ed=b.ed?b.ed:a.ed;
	if(res.st==res.ed) res.d=0;
	return res;
}
seq cap(seq a,seq b){//求交
	if(a.len()<b.len()) swap(a,b);
	if(b.len()==0) return b;
	seq res;
	if(b.len()<=2){
		if(a.in(b.st)) upd(res,b.st);
		if(b.len()==2&&a.in(b.ed)) upd(res,b.ed);
	}
	else{
		res.d=a.d,res.st=max(a.st,b.st),res.ed=min(a.ed,b.ed);
		if(res.st>res.ed) res={0,0,0};
		else if(res.st==res.ed) res.d=0;
	}
	return res;
}
struct Hash{//二元组(块编号、子串)哈希
    int h[P],nxt[N],bl[N],ct;
	ull s[N];
	seq g[N];
	void ins(int B,ull has,int p){
		int key=(B*W[0]+has*W[1])%P;
		for(int i=h[key];i;i=nxt[i]) if(bl[i]==B&&s[i]==has) {upd(g[i],p);return;}
		++ct,bl[ct]=B,s[ct]=has,nxt[ct]=h[key],h[key]=ct,upd(g[ct],p);
	}
	seq fd(int B,ull has){
		int key=(B*W[0]+has*W[1])%P;
		for(int i=h[key];i;i=nxt[i]) if(bl[i]==B&&s[i]==has) return g[i];
		return {0,0,0};
	}
};
struct dic{//基本子串字典
	int sa[N],rk[N],old[N],tmp[N],buc[N],pr[20][N]={0};
	ull h[20][N]={0};//hash 值
	Hash s[20];// hash 表
	void solve(int d,int c){
		int w=1<<d,ct=0;
		for(int i=1;i<n;i++) if(sa[i]+w-1<=n&&rk[sa[i]]==rk[sa[i+1]]) pr[d][sa[i+1]]=sa[i];
		for(int i=1;i+w*2-1<=n;i++){//计算哈希值
			h[d+1][i]=(h[d][i]+pw[1<<d]*h[d][i+w])%mod;
			s[d+1].ins(get(i,w*2),h[d+1][i],i);//更新块内信息
		}
		for(int i=n-w+1;i<=n;i++) tmp[++ct]=i;
		for(int i=1;i<=n;i++)
			if(sa[i]>w) tmp[++ct]=sa[i]-w;
		memset(buc,0,sizeof(buc));
		for(int i=1;i<=n;i++) buc[rk[i]]++;
		for(int i=1;i<=c;i++) buc[i]+=buc[i-1];
		for(int i=n;i>=1;i--) sa[buc[rk[tmp[i]]]--]=tmp[i];
		memcpy(old,rk,sizeof(rk));
		c=0;
		for(int i=1;i<=n;i++){
			if(old[sa[i]]==old[sa[i-1]]&&old[sa[i]+w]==old[sa[i-1]+w]) rk[sa[i]]=c;
			else rk[sa[i]]=++c;
		}
		if(c==n) return;
		solve(d+1,c);
	}
	void build(char *S){
		memset(buc,0,sizeof(buc));
		for(int i=1;i<=n;i++) buc[rk[i]=S[i]]++,h[0][i]=S[i],s[0].ins(i,S[i],i);
		for(int i=1;i<=m;i++) buc[i]+=buc[i-1];
		for(int i=n;i>=1;i--) sa[buc[rk[i]]--]=i;
		solve(0,m);
	}
	seq mat(int l,int r,int x,int y,int k){//匹配
		int b1=get(x,(1<<k)),b2=get(y,(1<<k));ull H=h[k][l];
		return merge(s[k].fd(b1,H).seg(x,y),s[k].fd(b2,H).seg(x,y));
	}
}D[2];
void query(int l,int r){//求最长 border、最短 border、border 个数
	int mx=0,mn=0x3f3f3f3f,cnt=0;
	for(int i=0;(1<<i)<r-l+1;i++){
		int v=1<<i,v1=min(v*2,r-l+1)-1;
		seq r1=D[0].mat(l,l+v-1,r-v1+1,r-v+1,i),r2=D[1].mat(n-r+1,n-(r-v+1)+1,n-(l+v1-1)+1,n-(l+v-1)+1,i);
		if(r1.st) r1.st=r-r1.st+1,r1.ed=r-r1.ed+1,swap(r1.st,r1.ed);
		if(r2.st) r2.st=n-l+1-r2.st+1,r2.ed=n-l+1-r2.ed+1,swap(r2.st,r2.ed);
        seq R=cap(r1,r2);
		int pos=R.ed;
		if(pos) mx=max(mx,R.ed),mn=min(mn,R.st),cnt+=R.len();
	}
	if(cnt) printf("%d %d %d\n",mn,mx,cnt);
	else printf("-1\n");
}
int main(){
	int l,r;
	scanf("%s%d",s+1,&q);
	n=strlen(s+1);
	pw[0]=1,W[0]=rd(),W[1]=rd();
	for(int i=1;i<=n;i++) pw[i]=pw[i-1]*p%mod;
	D[0].build(s),reverse(s+1,s+n+1),D[1].build(s);//正反串都建一遍
	while(q--){
		scanf("%d%d",&l,&r),l++,r++;
		query(l,r);
	}
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 129ms
memory: 313488kb

input:

ejdzjvhfouduzopksvrmktcerxlnwcaspfztkzjcguzbkloievrzdxutubkvhpwzedsebpjscfhswjzqanpdwjlljxubvoyuaauwxyyjzoryfthvjkbwqbippholdbmrpszwzuhkxxktzclviearfkwdegsrwjttxymiepczmgilmplnvulwbmlngpkxgcvyizlpzwuqfqxcneyjtkozanlkwkdqzsjjberqnyvlqoxrrkpbhyrlugfkwiepnjewhqjqhsursplcpznzfljvdzcrigjjxsmegrrhzetnvzql...

output:

-1
1 1 1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1 1 1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1 1 1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 50000 lines

Test #2:

score: 0
Accepted
time: 210ms
memory: 379064kb

input:

mmrqqmrrqmkhmkmkmkbhmhmgncyrhnbrrimkmkmktmkhmkhmkhqbsqbmmmmmmkhmkhqkhmkhqmkmkmkmkappsohmkhqkhmhmkhqkhmmbqbmmmmmmqbmmmmmmuwyvkbhkbhkbhkbhkbhbqbmmmmmmqbqbmmmmmmqbqbmmmmmmqihqkhmkhqmkmhqkhmkhqmkmymkhqmkmyvdnjurrimkmkmktrrimkmkmktrrimkmkmktynjurrimkmkmktnjurrimkmkmktnjurrimkmkmktrhnbrrimkmkmktrhnbrrimkm...

output:

556 1853 2
13 1254 7
12 1493 9
405 1071 2
1119 1119 1
6 394 5
1137 1137 1
4 795 3
6 1326 4
4 1084 4
359 1613 3
5 288 4
16 1738 7
79 710 2
7 1500 8
589 589 1
138 1510 3
136 1774 8
4 1886 10
2 1978 4
4 1886 10
589 1944 2
948 948 1
201 1498 2
345 345 1
11 1366 2
136 838 4
310 1665 2
39 1761 3
1093 2448...

result:

ok 50000 lines

Test #3:

score: 0
Accepted
time: 140ms
memory: 390420kb

input:

oygebgetdmkgpucchnlxqbwrubfyhdkewizorsidqwodzzwrubfyhdwrubfyhdxsqtgmfdcemxzlnjhjtugmfdcemgmfdcemgmfdcemgmfdcemubfyhdkubfyhdkubfyhdkubfyhdkubfyhdkrymyzvetdmkgpuetdmkgpuetdmkgpuetdmkgpuetdmkgputqbqjjyxmkkubfyhdkkubfyhdkkubfyhdkkubfyhdkkubfyhdkkubfyhdkkubfyhdkqbadmavokubfyhdkubfyhdkubfyhdkubfyhdkubfyhd...

output:

2 9058 4529
2 8326 4163
2 6010 3005
2 5722 2861
2 5022 2511
2 8146 4073
1 4949 2475
1 2951 1476
2 8922 4461
2 5546 2773
1 7117 3559
1 5465 2733
2 7464 3732
2 5058 2529
1 7669 3835
1 7789 3895
1 7485 3743
1 5273 2637
2 5058 2529
2 5998 2999
1 6199 3100
1 4345 2173
1 4831 2416
2 8634 4317
1 5993 2997
...

result:

ok 50000 lines

Test #4:

score: 0
Accepted
time: 200ms
memory: 383168kb

input:

jnnoffjsyjmzfwfcdagqxcoyzfjtjdnmjnnzczzybsmzfwfofviuoinoffjsnzczzyawfofkpetfzfmdagrcuetbvmpetfkwcusxogogyjpxgqxcoreiwqdsxwykpoxfmxfiodunzczzybsmzfbsjysmzxlmoprcuetbvmpyzrzfbsjyphlxzybsmzfwfofviuoivetfkwcusxogogyjpxgrhhzfjtjdinnoffjsyjmemogogyjpxgqxljuwpdrbzzretfkwcuzmzfwfofvpsfoprcuetbvmtcfwfcdagqxf...

output:

1 967 2
8 1211 2
499 499 1
1535 1535 1
230 230 1
2099 2099 1
509 509 1
332 332 1
608 608 1
1619 1619 1
1087 1087 1
1525 1525 1
1079 1079 1
455 455 1
309 309 1
245 245 1
433 433 1
1596 1596 1
446 446 1
887 887 1
1497 1497 1
841 841 1
40 486 2
50 963 2
1349 1349 1
1 1408 2
1291 1291 1
1939 1939 1
85 1...

result:

ok 50000 lines

Test #5:

score: 0
Accepted
time: 372ms
memory: 401068kb

input:

lpqpqppqpqppqppqpqppqpqppqppqpqppqppqpqppqpqppqppqpqppqpqppqppqpqppqppqpqppqpqppqppqpqppqppqpqppqpqppqppqpqppqpqppqppqpqppqppqpqppqpqppqppqpqppqpqppqppqpqppqppqpqppqpqppqppqpqppqppqpqppqpqppqppqpqppqpqppqppqpqppqppqpqppqpqppqppqpqppqppqpqppqpqppqppqpqppqpqppqppqpqppqppqpqppqpqppqppqpqppqpqppqppqpqpp...

output:

2 28208 12
1 22196 11
1 12549 9
1 13112 8
1 16603 12
3 6828 11
3 24424 15
2 21454 13
1 24922 8
1 22665 13
1 25809 13
2 23988 11
2 8681 10
1 20581 12
2 16257 10
1 21957 9
1 17814 13
3 14866 12
2 25876 11
1 19372 9
3 17633 9
5 18588 10
1 22565 13
3 22568 8
2 12532 10
5 20711 11
1 21671 11
1 16798 12
3...

result:

ok 50000 lines

Test #6:

score: 0
Accepted
time: 619ms
memory: 324384kb

input:

fqmsihplprqnqqiinahlxivhpazabczbkroqhvdwipsedcwdoajmuyaymjktgpmbccmcpkuoqovmzqkehohupeltdznfvzvrwswhiyatdacoxgmjkrkmqkzlrzclxsowurnvxverfihziptkxgedqhpzncibpyppbttpbiyflvqwgmtdeseeqmgrvvbiedspjocdrvkwbgbmjaloqmgulyofflkmqzaqhitggjhtfuomgwcuinjepkzutyaryhkidybadvebzkyfnrutdllpkndcauptzjgqtxkgrehvudia...

output:

-1
1 1 1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1 1 1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 200000 lines

Test #7:

score: 0
Accepted
time: 1942ms
memory: 452868kb

input:

mffmffmfmffmffmfmffmfmffmffmfmffmffmfmffmfmffmffmfmffmfmffmffmfmffmffmfmffmfmffmffmfmffmffmfmffmfmffmffmfmffmfmffmffmfmffmffmfmffmfmffmffmfmffmfmffmffmfmffmffmfmffmfmffmffmfmffmffmfmffmfmffmffmfmffmfmffmffmfmffmffmfmffmfmffmffmfmffmffmfmffmfmffmffmfmffmfmffmffmfmffmffmfmffmfmffmffmfmffmfmffmffmfmffm...

output:

1 112967 15
1 75896 12
2 105017 12
1 45210 11
1 107089 15
2 116198 12
3 104510 11
2 86195 14
1 81422 14
3 54081 11
1 74329 12
1 54221 10
2 92660 12
1 80199 13
5 62623 11
2 95314 11
5 81685 15
3 96030 12
2 61769 14
2 27276 11
1 81990 16
1 52500 15
1 115632 15
2 55405 9
1 68620 13
3 110426 14
2 66016 ...

result:

ok 200000 lines

Test #8:

score: 0
Accepted
time: 621ms
memory: 322212kb

input:

orjzbzsidimqhlftjqjrpzgdpsmufzccurjnsvotlbrhtjikcbrbsyhxubacgdvxuuhcidpbxdjomhvwtqxlvrykwaupthxsnhpahixdshtsewxwudmsehqcljnufoigeqjagrflaaindvcdzaesncrucsajyxuyailrfqtybxgxalfanbavdbypemsbaoayclsmsndnjxdzvrfsbjnabxixbolvblkuwkhshfscfdxjvgghdsbiirmaogofcwetqwwovcylgwnqwfjchgsvukdtkkacuotolylqcyndisnu...

output:

-1
-1
-1
-1
-1
-1
1 1 1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1 1 1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1 1 1
-1
-1
-1
1 1 1
-1
1 1 1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1 1 1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 200000 lines

Test #9:

score: 0
Accepted
time: 1156ms
memory: 431512kb

input:

ijdkzqqczzxhfqcdzzzzhdaehqqqqqczebmipqmmimimimiczeczeoguwkzebmizebmizebmifqmiczmifmifmifdkzdkzdkzihhlcdzzzzhcdzzzzhcgcifmifmifivskhjdhcdzzhcdzztfdkzdfdkzdfdkzdfdkzdzhcdzztfdkzdfdkzdzhcdzztfdkzdfdkzdbjxgckbuyqltftftftftftfqqczebmipqmmimimcbuyqlbuyqldzzzzhcdzzzzhcgcifmifmifidzzzzhcdzzzzhcgcifmifmifidz...

output:

711 2386 2
1 4155 2
954 7695 3
182 4363 2
1 2610 3
1 5938 4
3764 3764 1
5831 5831 1
12 3704 3
52 3402 2
3377 3377 1
3225 3225 1
2144 2144 1
651 3703 3
1072 5253 2
3782 3782 1
1625 5806 2
1 2549 3
5927 5927 1
6245 6245 1
9 5089 2
8 7115 5
5360 5360 1
2004 2004 1
28 8104 4
1398 1398 1
14 4560 3
3859 3...

result:

ok 200000 lines

Test #10:

score: 0
Accepted
time: 1181ms
memory: 431204kb

input:

rrrrtrtrrrrrgkrrrbenhabenbenhahahayahaaharrrrgbbebebeoihannnnnhnhahahhahahhahahskkkkkkkkrrrgrrrgrrrgrrrgrrrrrrrrrrrrqfvlfyahaaharrryahaaharrrqqynhahahayahaahanhahahayahaahanhahahayahaahabebebeoibebebeoibebebeoirzmcnjrbebebeoihanbebebeoihanrrrgrrrgrrrrrrrrrrrgrrrgrrrrrrrroyahaaharrrrgbbebebeoihannnnn...

output:

72 5023 2
4157 9554 2
1 3413 3
1 4409 3
1832 4524 2
150 7215 3
136 4348 4
2836 2836 1
1 9327 5
638 3330 2
4934 4934 1
1194 6138 2
10 7723 4
2 4773 5
19 5550 3
66 7619 2
2534 5249 2
1398 4113 2
10 7308 4
1044 8349 3
1 7619 4
554 6191 2
4 3071 2
4195 9832 2
4346 9983 2
1 8200 4
710 7775 3
93 4840 2
2 ...

result:

ok 200000 lines

Test #11:

score: 0
Accepted
time: 1106ms
memory: 426280kb

input:

kynffoqykynffoqubztubzypkpeakynkynkynarnftsskwnlynkynynkynynkynynkynkxwkwnlynkynykwnlynkynykwnlynkynycfjpnbqqcobqqcbqqcbqqcbqqcbqqcbqqcbqqcbqqcbqqcbqqctzkxpakynkyakynkyakynkyakynkyyuwjfjpnbqqcobfjpnbqqcobfjpnbqqcobfjpnbqqcobfjpnbqqcobfjpnbqqcobwtfmepycsfvewueeynkynkynarynkynkynarynkynkynarynkynkynar...

output:

1 39521 4942
3 11611 1452
4 36044 4506
1 25345 3170
8 25776 3222
1 25052 3133
2 31074 3885
2 26682 3336
2 35223 4404
1 21910 2740
1 27545 3445
1 41518 5191
2 37111 4640
1 24649 3082
2 19909 2490
1 40006 5002
2 41690 5212
2 31810 3977
1 22564 2822
1 38833 4856
1 26948 3370
8 35672 4459
1 29620 3704
5...

result:

ok 200000 lines

Test #12:

score: 0
Accepted
time: 968ms
memory: 418020kb

input:

amezpqzdfcezezujzivlcxqpuafilacgywkmlzdfcezdfcejbzeamuszlvblfcezezufcezezufcezezudcezezufcezezufcezezufujpuafilacgypuafilacgypuafilacgypuafilacgydsnrlybfdcezezufccezezufccezezufccezezufccezezufccezezufccezezufcezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezezez...

output:

1 27489 27489
1 30282 30282
1 25244 25244
1 26472 26472
1 22122 22122
1 19073 19073
1 30941 30941
1 28853 28853
1 31504 31504
1 25281 25281
1 22887 22887
1 25247 25247
1 32188 32188
1 29211 29211
1 25912 25912
1 26458 26458
1 23533 23533
1 15452 15452
1 25101 25101
1 31263 31263
1 32800 32800
1 3038...

result:

ok 200000 lines

Test #13:

score: 0
Accepted
time: 1039ms
memory: 424720kb

input:

vwerjycxrmqpxskgskyjywebpamlztkiamenclhqluhvviwhkkiamlztpqcjhcxnlswiupqiciwhkkiamjelcxrmqpxswghwzcxnllswiknayqgbhtpgtzjtkiamenclkyjywebpamlxfssxxrxhiigijssxxrxhkyjylswghwzcxnllswbhkabdeolswiknayqgbhtyxpvapbmjpbssxxrxhiigbxfwecjhtsqokiamenclkyjywebpamlxfssgpbhkabdeolswiknwzcxnllklclhqluhvvihiigbxfwec...

output:

6033 6033 1
6926 6926 1
5629 5629 1
6942 6942 1
5535 5535 1
25 3797 2
7331 7331 1
9 4269 2
1984 1984 1
4918 4918 1
6056 6056 1
1519 1519 1
3657 3657 1
3044 3044 1
1894 1894 1
4921 4921 1
15 3344 2
4355 4355 1
2931 2931 1
29 3977 2
4444 4444 1
4537 4537 1
4501 4501 1
5809 5809 1
5055 5055 1
2676 2676...

result:

ok 200000 lines

Test #14:

score: 0
Accepted
time: 1045ms
memory: 420716kb

input:

kwgyrspsryokpskkyrdyqdgcgkkywbgcddakpseyrdykluycjegkkyebsykymlavgfknkyvgtpjrdqlavgfknzhajgtpjrdqlaijxbltklzxyrdgtocqdjdqlaijuwjelkksryokpskkyrmqfpqgueodrobtrsprztzrcgxovqejlhdspkpskkyrqwtjnypueeovqejzzdhuxwkluycjegkgkkywbgcddakpseyrdyklucghpdqlavgfknzhajgtpjrdqlaijxghcmsmdhbkmsprztzrcgxovqejlhpiiitt...

output:

3803 3803 1
36 1549 2
4383 4383 1
4312 4312 1
5392 5392 1
3874 3874 1
2427 2427 1
1640 1640 1
4711 4711 1
2711 2711 1
5237 5237 1
1190 1190 1
1059 1059 1
2934 2934 1
4117 4117 1
5489 5489 1
1540 1540 1
2849 2849 1
4968 4968 1
1 4279 3
2 7188 2
5365 5365 1
3451 3451 1
5779 5779 1
3546 3546 1
2987 298...

result:

ok 200000 lines

Test #15:

score: 0
Accepted
time: 1972ms
memory: 454108kb

input:

exexeexefbfbffbfbffbffbfbffbfbffbffbfbffbffbfbffbfbffbffbfbffbfbffbffbfbffbffbfbffbfbffbffbfbffbffbfbffbfbffbffbfbffbfbffbffbfbffbffbfbffbfbffbffbfbffbfbffbffbfbffbffbfbffbfbffbffbfbffbffbfbffbfbffbffbfbffbfbffbffbfbffbffbfbffbfbffbffbfbffbffbfbffbfbffbffbfbffbfbffbffbfbffbffbfbffbfbffbffbfbffbfbffb...

output:

3 79473 13
1 116370 15
2 39673 13
1 84202 18
3 74125 13
1 90780 15
2 103326 13
1 82127 11
1 108341 12
1 79618 13
2 79507 12
1 113524 14
1 76401 10
1 46801 11
2 98817 16
2 78331 13
1 101763 13
3 57746 9
1 62773 12
2 97327 10
1 87271 13
1 93431 10
2 67927 11
1 61409 14
2 52925 11
2 55206 10
1 69597 14...

result:

ok 200000 lines

Test #16:

score: 0
Accepted
time: 9ms
memory: 305496kb

input:

uhsubldcdaudhstzvgzupbwirwdzurvqhluslsnqibiafvzlqpuizuylyvxwuepkmhovjqrwodehrjadypwuswakxpfiegtduvzwkyryiisnkwgngzcsntnrbkusvxnfgbpgplwmvktrghwkcshkkfcdoaommcgwdwvyujxxemlnqgoyrewkzhgcqihjmxgkuzgeibdntundevqayklxvphtmktixsribrfdcxchnheljrojnoijxdvulwrhgwpcpppzinbyprbxtyzsjvphadugrczulhluiarlhfgxiugv...

output:

-1
-1
-1
-1
-1
-1
-1
1 1 1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1 1 1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 2000 lines

Test #17:

score: 0
Accepted
time: 12ms
memory: 336436kb

input:

hhvtukffcovscoldtuzwhvmjcococydtbbkavtukhvmdvmjcvmjcvmjcvtuvtuvtuvtutcococococorkcococcococsmjcvmjcvmjmjcvmjcvmjcvmcvmcvmcvmwiotukffcovsctukffcovsciqmcvmwmcvmwmcvmwzzzzzzzzzzzpkvtutcococococovtutcococococovtutcococococowiotukffcovscwiotukffcovscvtuvtutcococococorkcococcocococovtutcococococowiotucoco...

output:

33 33 1
22 99 2
34 111 2
1 82 3
47 124 2
2 87 3
21 98 2
60 60 1
57 57 1
43 43 1
1 78 2
42 119 2
65 142 2
19 96 2
1 103 3
35 112 2
75 75 1
15 92 2
25 102 2
1 46 2
1 37 2
1 135 3
68 68 1
15 92 2
2 59 2
2 79 2
23 23 1
1 122 3
1 116 3
53 53 1
2 96 4
13 90 2
6 37 2
25 102 2
2 57 2
68 145 2
1 30 2
6 28 2
...

result:

ok 2000 lines

Test #18:

score: 0
Accepted
time: 12ms
memory: 337488kb

input:

vydcsvacjwnohxvacjwnovacjwnodhjehjehjehjehjewovacjovacjovacjovacjovacjovacjovacjfjejejejejejejejejejejejejejejejejejejejejejejejejejejejejejejejejejejezamlvyywpvacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovavacjovaeshaxlx...

output:

1 783 783
1 619 619
1 772 772
1 588 588
1 638 638
1 721 721
1 631 631
1 445 445
1 775 775
1 769 769
1 807 807
1 507 507
1 564 564
1 795 795
1 638 638
1 578 578
1 791 791
1 439 439
1 833 833
1 680 680
1 583 583
1 853 853
1 571 571
1 569 569
1 753 753
1 778 778
1 672 672
1 689 689
1 797 797
1 661 661
...

result:

ok 2000 lines

Test #19:

score: 0
Accepted
time: 10ms
memory: 330580kb

input:

cctcwdmpbnuaqsswtcgojerqmojesjsyxvkmakjcmakjxdtqrtyrbqcctcwdpbnuaqeqnecieqtpsonfzfwtcgojbbwdpbnuaqegitnlebsecieqtpsiojttjglhtrtyrnlhtrtyrnybghhpxlswdcjsyxvkxuonfzfwtcgoptaituxrxebjubsvgrkxdadttrtyrnlhtrtyrnybgmlopfpmswgoptaituxrxebjyybsecieqtpsifokmopsonfzfwtcgojbbwdgoptaituxrxebjubsvgrkxdadthgcrtyr...

output:

43 43 1
49 49 1
74 74 1
38 38 1
4 42 2
66 66 1
45 45 1
75 75 1
37 37 1
11 60 2
16 54 2
22 22 1
33 33 1
11 11 1
24 24 1
9 9 1
28 28 1
61 61 1
44 44 1
74 74 1
1 38 2
38 38 1
21 21 1
53 53 1
69 69 1
62 62 1
39 39 1
12 12 1
44 44 1
39 39 1
24 24 1
48 48 1
63 63 1
28 28 1
24 24 1
18 18 1
58 58 1
37 37 1
...

result:

ok 2000 lines

Test #20:

score: 0
Accepted
time: 16ms
memory: 349800kb

input:

crffrfbiibiibibiibiibibiibibiibiibibiibiibibiibibiibiibibiibibiibiibibiibiibibiibibiibiibibiibiibibiibibiibiibibiibibiibiibibiibiibibiibibiibiibibiibibiibiibibiibiibibiibibiibiibibiibiibibiibibiibiibibiibibiibiibibiibiibibiibibiibiibibiibiibibiibibiibiibibiibibiibiibibiibiibibiibibiibiibibiibibiibii...

output:

2 318 6
2 397 6
1 512 9
2 450 7
3 568 6
2 335 6
5 649 4
2 423 8
5 492 6
1 455 9
2 960 10
1 265 5
1 539 8
3 605 6
1 619 4
8 851 7
2 570 6
1 411 8
3 956 9
1 664 8
2 615 8
-1
1 579 7
1 815 10
2 539 9
5 822 8
2 332 6
1 791 8
1 566 6
2 801 8
-1
3 841 7
1 656 7
2 675 9
1 403 6
1 839 8
1 342 8
1 556 9
1 59...

result:

ok 2000 lines