#include<stdio.h>#include<string.h>char s[400005];int next[400005],sta[400005],all;void get_next(){ int len=strlen(s+1),i=1,j; next[1]=j=0; while(i<=len) { if(j==0||s[i]==s[j]) next[++i]=++j; else j=next[j]; }}void solve(){ int len=strlen(s+1),i; all=0,sta[all++]=len; for(i=len;i>1;) { if(next[i+1]>1) sta[all++]=next[i+1]-1; i=next[i+1]-1; }}void PRint(){ int i; for(i=all-1;i>0;i--) printf("%d ",sta[i]); printf("%d/n",sta[i]);}int main(){ while(scanf("%s",&s[1])>0) { get_next(); solve(); print(); } return 0;}
新闻热点
疑难解答