#include <bits/stdc++.h>

using namespace std;

struct vertex
{
    vertex *to[2]={0,0};
    vertex *up;

    vertex():up(0){}

    bool add(char t)
    {
        if(to[t]) return 0;
        vertex *temp=new vertex;
        temp->up=this;
        to[t]=temp;
        return 1;
    }
};

template<int delta> struct base
{
private:
    vector<int> rad;
    string text;
    int i;
    int n;

    vector<vertex*> link;
    vertex *root;

public:

    base():i(1),n(0)
    {
        text.push_back('$');
        rad.push_back(0);
        root=new vertex;
        link.push_back(root);
    }

    bool add_letter(char t)
    {
        int r=0;
        text+=t;
        rad.push_back(0);
        link.push_back(root);

        int s=i;
        for(; i<=n+delta; i++)
        {
            link[i]=link[s-(i-s)];
            rad[i]=rad[s-(i-s)];

            while(rad[i]-delta>n-i)
                rad[i]--,link[i]=link[i]->up;

            if(text[i-rad[i]]==text[i+rad[i]+1-delta])
            {
                r=link[i]->add(t);
                link[i]=link[i]->to[t];
                rad[i]++;
                break;
            }
        }
        n++;
        return r;
    }
};

struct manacher
{
private:
    base<0> even;
    base<1> odd;

public:
    int add_letter(char t)
    {
    	t-='a';
        return odd.add_letter(t)+even.add_letter(t);
    }
} me;

main()
 {
    ios::sync_with_stdio(0);
    cin.tie(0);
    char t;
    while((t=getchar())!='\n')
        cout<<me.add_letter(t)<<' ';
    cout<<"\n";
}
