KMP
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char b[400005];
int next[400005];
int n, m;
void getnext()
{
int j,k;
j=0;
k=-1;
next[0]=-1;
while(j<m)
{
if(k==-1 || b[j]==b[k]) next[++j]=++k;
else k=next[k];
}
}
int main() {
while(scanf("%s", b) != EOF) {
m = strlen(b);
getnext();
int ans[400000];
int len = 0;
while(next[m]) {
ans[len++] = next[m];
m = next[m];
}
for(int i = len-1; i >= 0; i--) {
printf("%d ", ans[i]);
}
printf("%d\n", strlen(b));
}
return 0;
}