#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define maxn 400000
int next[maxn + 2];
char p[maxn + 2];
int num[maxn];
void kmp(char p[])
{
int m = strlen(p + 1);
next[1] = 0;
for( int k = 0, q = 2;q<=m ;q++)
{
while( k >0 && p[k+1] != p[q])
k = next[k];
if(p[k+1] == p[q])
k++;
next[q] = k;
}
}
int main()
{
while( scanf("%s",p+1)!=EOF)
{
kmp(p);
int len = strlen(p+1);
int n = 0;
num[n++] = len;
while( next[len] != 0)
{
num[n++] = next[len];
len = next[len];
}
sort(num,num+n);
for( int i = 0; i<n; i++)
{
printf("%d",num[i]);
printf("%c",i == n - 1 ?'\n': ' ');
}
}
}
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define maxn 400000
int next[maxn + 2];
char p[maxn + 2];
int num[maxn];
void kmp(char p[])
{
int m = strlen(p + 1);
next[1] = 0;
for( int k = 0, q = 2;q<=m ;q++)
{
while( k >0 && p[k+1] != p[q])
k = next[k];
if(p[k+1] == p[q])
k++;
next[q] = k;
}
}
int main()
{
while( scanf("%s",p+1)!=EOF)
{
kmp(p);
int len = strlen(p+1);
int n = 0;
num[n++] = len;
while( next[len] != 0)
{
num[n++] = next[len];
len = next[len];
}
sort(num,num+n);
for( int i = 0; i<n; i++)
{
printf("%d",num[i]);
printf("%c",i == n - 1 ?'\n': ' ');
}
}
}