#include<bits/stdc++.h>
using namespace std;
struct palindromes: vector<int> {
int update(int i, const string &s) {
palindromes q;
for (auto l: *this)
if (l > 0 and s[l-1] == s[i])
q.push_back(l-1);
if (i > 0 and s[i-1] == s[i])
q.push_back(i-1);
q.push_back(i), swap(q);
return size(); } };
int main() {
string s; palindromes p;
cin >> s;
for (int n = s.size(), i = 0; i < n; ++i)
cout << p.update(i,s) << '\n'; }
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBwYWxpbmRyb21lczogdmVjdG9yPGludD4gewogICAgaW50IHVwZGF0ZShpbnQgaSwgY29uc3Qgc3RyaW5nICZzKSB7CiAgICAgICAgcGFsaW5kcm9tZXMgcTsKICAgICAgICBmb3IgKGF1dG8gbDogKnRoaXMpCiAgICAgICAgICAgIGlmIChsID4gMCBhbmQgc1tsLTFdID09IHNbaV0pCiAgICAgICAgICAgICAgICBxLnB1c2hfYmFjayhsLTEpOwogICAgICAgIGlmIChpID4gMCBhbmQgc1tpLTFdID09IHNbaV0pCiAgICAgICAgICAgIHEucHVzaF9iYWNrKGktMSk7CiAgICAgICAgcS5wdXNoX2JhY2soaSksIHN3YXAocSk7CiAgICAgICAgcmV0dXJuIHNpemUoKTsgfSB9OyAKCmludCBtYWluKCkgewogICAgc3RyaW5nIHM7IHBhbGluZHJvbWVzIHA7CiAgICBjaW4gPj4gczsKICAgIGZvciAoaW50IG4gPSBzLnNpemUoKSwgaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgY291dCA8PCBwLnVwZGF0ZShpLHMpIDw8ICdcbic7IH0=