#include <bits/stdc++.h>
#define ll long long
#define len(s) (int)s.size()
#define pb push_back
#define fi first
#define se second
#define MASK(x) ((1LL)<<(x))
#define BIT(x,i) (((x) >>(i))&(1LL))
#define ii pair<int,int>
#define OpenFile(Name) if (fopen(Name".inp", "r")) freopen(Name".inp","r",stdin),freopen(Name".out","w",stdout);
using namespace std;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
ll K=1e18,MOD=1e9+7;
const int N=1e6+5,M=5e3+3,base=31;
///____________________________________________________________________________________________________________________________
int dp[M][M];
ll res[M];
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
OpenFile("TASK");
string s; cin>>s;
int n=len(s);
for (int k=1;k<=n;++k) {
for (int l=0;l<n-k+1;++l) {
int r=l+k;
if (k==1) {
dp[l][r]=1;
continue;
} else
if (k==2) {
if (s[l]==s[r-1]) dp[l][r]=2;
continue;
}
if (s[l]!=s[r-1] || !dp[l+1][r-1]) continue;
int m=(l+r)>>1;
dp[l][r]=1;
if (k&1) {
if (dp[l][m] && dp[m+1][r]) dp[l][r]=dp[l][m]+1;
} else
if (dp[l][m] && dp[m][r]) dp[l][r]=dp[l][m]+1;
}
}
for (int k=1;k<=n;++k)
for (int l=0;l<n-k+1;++l) res[dp[l][l+k]]++;
for (int i=n-1;i>=1;--i) res[i]+=res[i+1];
for (int i=1;i<=n;++i) cout<<res[i]<<' ';
cerr<<"\nBien dich thanh cong\nTime: "<<(1.0*clock()/CLOCKS_PER_SEC)<<" s";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGVuKHMpIChpbnQpcy5zaXplKCkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIE1BU0soeCkgKCgxTEwpPDwoeCkpCiNkZWZpbmUgQklUKHgsaSkgKCgoeCkgPj4oaSkpJigxTEwpKQojZGVmaW5lIGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBPcGVuRmlsZShOYW1lKSBpZiAoZm9wZW4oTmFtZSIuaW5wIiwgInIiKSkgZnJlb3BlbihOYW1lIi5pbnAiLCJyIixzdGRpbiksZnJlb3BlbihOYW1lIi5vdXQiLCJ3IixzdGRvdXQpOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGR4WzRdPXswLDEsMCwtMX07CmludCBkeVs0XT17MSwwLC0xLDB9OwoKbGwgSz0xZTE4LE1PRD0xZTkrNzsKY29uc3QgaW50IE49MWU2KzUsTT01ZTMrMyxiYXNlPTMxOwoKLy8vX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwoKCgoKaW50IGRwW01dW01dOwpsbCByZXNbTV07CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIE9wZW5GaWxlKCJUQVNLIik7CgoKICAgIHN0cmluZyBzOyBjaW4+PnM7CiAgICBpbnQgbj1sZW4ocyk7CgoKICAgIGZvciAoaW50IGs9MTtrPD1uOysraykgewogICAgICAgIGZvciAoaW50IGw9MDtsPG4taysxOysrbCkgewogICAgICAgICAgICBpbnQgcj1sK2s7CgogICAgICAgICAgICBpZiAoaz09MSkgewogICAgICAgICAgICAgICAgZHBbbF1bcl09MTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgaWYgKGs9PTIpIHsKICAgICAgICAgICAgICAgIGlmIChzW2xdPT1zW3ItMV0pIGRwW2xdW3JdPTI7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHNbbF0hPXNbci0xXSB8fCAhZHBbbCsxXVtyLTFdKSBjb250aW51ZTsKCiAgICAgICAgICAgIGludCBtPShsK3IpPj4xOwogICAgICAgICAgICBkcFtsXVtyXT0xOwogICAgICAgICAgICBpZiAoayYxKSB7CiAgICAgICAgICAgICAgICBpZiAoZHBbbF1bbV0gJiYgZHBbbSsxXVtyXSkgZHBbbF1bcl09ZHBbbF1bbV0rMTsKICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICBpZiAoZHBbbF1bbV0gJiYgZHBbbV1bcl0pIGRwW2xdW3JdPWRwW2xdW21dKzE7CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGs9MTtrPD1uOysraykKICAgIGZvciAoaW50IGw9MDtsPG4taysxOysrbCkgcmVzW2RwW2xdW2wra11dKys7CgoKICAgIGZvciAoaW50IGk9bi0xO2k+PTE7LS1pKSByZXNbaV0rPXJlc1tpKzFdOwogICAgZm9yIChpbnQgaT0xO2k8PW47KytpKSBjb3V0PDxyZXNbaV08PCcgJzsKCgoKICAgIGNlcnI8PCJcbkJpZW4gZGljaCB0aGFuaCBjb25nXG5UaW1lOiAiPDwoMS4wKmNsb2NrKCkvQ0xPQ0tTX1BFUl9TRUMpPDwiIHMiOwogICAgcmV0dXJuIDA7Cn0KCg==