#include <bits/stdc++.h>   using namespace std;   const int N = 32000;   const int mod = 1000000007;   const int inf = 2 * mod;   int dp[5001][5001];   pair<long long, long long> hashVal[5001];   pair<long long, long long> powVal[5001];   const long long base1 = 37;   const long long base2 = 2017;   const long long mod1 = 1e9 + 7;   const long long mod2 = 1e9 + 297;   int ans[50001];   string s;   inline int ceil(int p, int q) { return (p + q - 1) / q; }   int call(int l, int r) {     if (l > r) return 0;     if (l == r) return 1;     if (l == r - 1) return (s[l] == s[r] ? 2 : 0);     if (dp[l][r] != -1) return dp[l][r];     int ret;     if (s[l] != s[r] || call(l + 1, r - 1) == 0)       ret = 0;     else       ret = 1 + call(l, ceil(l + r, 2) - 1);     return dp[l][r] = ret;   }   int main() {     cin >> s;     int len = s.length();     memset(dp, -1, sizeof(dp));     for (int i = 0; i < len; i++) {       for (int j = 0; j < len; j++) {         ans[call(i, j)]++;       }     }     for (int i = len - 1; i >= 1; i--) ans[i] += ans[i + 1];     for (int i = 1; i <= len; i++) {       cout << ans[i] <<    ;     }     cout << endl;     return 0;   }   