#include<bits/stdc++.h>
using namespace std;
char a[100010],n;
int nxt[100010];
int cnt[100010];
int ans[100010];
void Nxt(){
for(int i=2,now=0;i<=n;i++){
while(now&&a[i]!=a[now+1])now=nxt[now];
if(a[i]==a[now+1])now++;
nxt[i]=now;
}
}
int main(){
cin>>a+1;
n=strlen(a+1);
Nxt();
for(int i=n;i>=1;i--){
cnt[i]++;
cnt[nxt[i]]+=cnt[i];
}
int cnt1=0;
for(int i=nxt[n];i;i=nxt[i]){
ans[++cnt1]=i;
}
printf("%d\n",cnt1+1);
sort(ans+1,ans+1+cnt1);
for(int i=1;i<=cnt1;i++){
printf("%d %d\n",ans[i],cnt[ans[i]]);
}
printf("%d %d",n,cnt[n]);
return 0;
}
为什么第八个点会cnt1为0?感觉nxt没有问题啊