#include<bits/stdc++.h>
using namespace std;
#define mod 1000007
#define inf 999999999
#define re register
#define maxn 100000
string a;
int dp[110][110];
int main()
{
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
cin>>a;
int n=a.size();
memset(dp,0x3f,sizeof(dp));
for(re int i=n;i>=1;i--)
for(re int j=i;j<=n;j++)
{
dp[i][j]=j-i+1;
int l=j-i+1;
for(re int k=i;k<sqrt(l);k++)
{
int p=1;
if(l%k) continue;
for(re int o=i;o<=j-k+1;o+=k)
{
if(a[i-1]!=a[o-1])
{
p=0;
break;
}
}
if(p==0)
continue;
int lp=l/k;
int ll;
if(lp<10)
ll=1;
else
ll=log10(l)+1;
dp[i][j]=min(dp[i][j],dp[i][i+k-1]+2+ll);
}
for(re int k=i;k<j;k++)
dp[i][j]=min(dp[i][k]+dp[k+1][j],dp[i][j]);
}
for(int i=1;i<=n;i++,puts(""))
for(int j=1;j<=n;j++)
cout<<dp[i][j]<<' ';
cout<<dp[1][n];
return 0;
}
/*
AAAAAAAAAABABAB
1 2 3 4 4 4 4 4 4 5 6 /6/ 6 7 6
0 1 2 3 4 5 5 6 5 6 5 6 5 6 5
0 0 1 2 3 4 5 6 7 8 9 10 11 6 7
0 0 0 1 2 3 4 5 6 7 8 9 10 11 12
0 0 0 0 1 2 3 4 5 6 7 8 9 10 11
0 0 0 0 0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0 0 1 2 3 4 5 6
0 0 0 0 0 0 0 0 0 0 1 2 3 4 5
0 0 0 0 0 0 0 0 0 0 0 1 2 3 4
0 0 0 0 0 0 0 0 0 0 0 0 1 2 3
0 0 0 0 0 0 0 0 0 0 0 0 0 1 2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
6
*/