#include<bits/stdc++.h>
using namespace std;
const int MOD = 1e9+9;
const int MAX = 5007;
#define ll long long int
ll sm = 0;
vector<int> power(10000);
int n;
int get_hash(int l,int r,vector<int> &hash,int type){
if(type == 0) return (hash[r] - power[r-l+1]*(l-1>=0 ? hash[l-1] : 0) + MOD)%MOD;
else return (hash[l] - power[r-l+1]*(r+1<=n-1 ? hash[r+1] : 0) + MOD)%MOD;
}
void solve(string s){
n = s.length();
int p = 31;
vector<int> res(n,0);
int pw = 1;
power[0] = 1;
vector<int> fr(n,1),bw(n,1);
fr[0] = (s[0] - 'a' + 1);
bw[n-1] = (s[n-1] - 'a' + 1);
for(int i = 1;i<n;i++){
pw = (pw*p)%MOD;
power[i] = pw;
fr[i] = (fr[i-1] + ((s[i] - 'a'+1)*pw)%MOD)%MOD;
bw[i] = (bw[n-1-i] + ((s[n-1-i] - 'a'+1)*pw)%MOD)%MOD;
}
map<int,int> hmap;
for(int i = 0;(1<<i)<=n;i++){
int len = (1<<i);
for(int j = 0;j<n;j++){
if(j+len-1>=n) continue;
int h1 = get_hash(j,j + (len-1)/2,fr,0);
int h2 = get_hash(j + (len-1)/2 + 1,j+len-1,bw,1);
if(h1 == h2) hmap[len]++;
}
}
int sm = 0,i = 0;
for(auto &m : hmap) sm+=(m.second);
for(auto &m : hmap){
res[i] = sm;
sm-=m.second;
i++;
}
for(int j =0;j<n;j++) cout<<res[i]<<" ";
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
string s;
cin>>s;
solve(s);
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE1PRCA9IDFlOSs5Owpjb25zdCBpbnQgTUFYID0gNTAwNzsKI2RlZmluZSBsbCBsb25nIGxvbmcgaW50CmxsIHNtID0gMDsKCnZlY3RvcjxpbnQ+IHBvd2VyKDEwMDAwKTsKaW50IG47CgppbnQgZ2V0X2hhc2goaW50IGwsaW50IHIsdmVjdG9yPGludD4gJmhhc2gsaW50IHR5cGUpewoJCglpZih0eXBlID09IDApIHJldHVybiAoaGFzaFtyXSAtIHBvd2VyW3ItbCsxXSoobC0xPj0wID8gaGFzaFtsLTFdIDogMCkgKyBNT0QpJU1PRDsgCgllbHNlIHJldHVybiAoaGFzaFtsXSAtIHBvd2VyW3ItbCsxXSoocisxPD1uLTEgPyBoYXNoW3IrMV0gOiAwKSArIE1PRCklTU9EOyAKfQoKCnZvaWQgc29sdmUoc3RyaW5nIHMpewoJCiAgICBuID0gcy5sZW5ndGgoKTsKICAgIGludCBwID0gMzE7Cgl2ZWN0b3I8aW50PiByZXMobiwwKTsKCQoJaW50IHB3ID0gMTsKCXBvd2VyWzBdID0gMTsKCQoJdmVjdG9yPGludD4gZnIobiwxKSxidyhuLDEpOwoJZnJbMF0gPSAoc1swXSAtICAnYScgKyAxKTsKCWJ3W24tMV0gPSAoc1tuLTFdIC0gICdhJyArIDEpOwoJZm9yKGludCBpID0gMTtpPG47aSsrKXsKCQkKCQlwdyA9IChwdypwKSVNT0Q7CgkJcG93ZXJbaV0gPSBwdzsKCQlmcltpXSA9IChmcltpLTFdICsgKChzW2ldIC0gJ2EnKzEpKnB3KSVNT0QpJU1PRDsgCgkJYndbaV0gPSAoYndbbi0xLWldICsgKChzW24tMS1pXSAtICdhJysxKSpwdyklTU9EKSVNT0Q7IAoJfQoJCgkKCW1hcDxpbnQsaW50PiBobWFwOwoJZm9yKGludCBpID0gMDsoMTw8aSk8PW47aSsrKXsKCQkKCQlpbnQgbGVuID0gKDE8PGkpOwoJCQoJCWZvcihpbnQgaiA9IDA7ajxuO2orKyl7CgkJCQoJCQlpZihqK2xlbi0xPj1uKSBjb250aW51ZTsKCQkJCgkJCWludCBoMSA9IGdldF9oYXNoKGosaiArIChsZW4tMSkvMixmciwwKTsgCgkJCWludCBoMiA9IGdldF9oYXNoKGogKyAobGVuLTEpLzIgKyAxLGorbGVuLTEsYncsMSk7IAoJCQkKCQkJaWYoaDEgPT0gaDIpIGhtYXBbbGVuXSsrOwoJCX0KCX0KCglpbnQgc20gPSAwLGkgPSAwOwoJZm9yKGF1dG8gJm0gOiBobWFwKSBzbSs9KG0uc2Vjb25kKTsKCglmb3IoYXV0byAmbSA6IGhtYXApewoJCQkJCgkJcmVzW2ldID0gc207CgkJc20tPW0uc2Vjb25kOwoJCWkrKzsJCgl9CgoJZm9yKGludCBqID0wO2o8bjtqKyspIGNvdXQ8PHJlc1tpXTw8IiAiOwoJCn0KCmludCBtYWluKCl7CgkKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJY2luLnRpZSgwKTsgIGNvdXQudGllKDApOwoJCglzdHJpbmcgczsKCWNpbj4+czsKCXNvbHZlKHMpOwoJCglyZXR1cm4gMDsKfQ==