#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
string convert(string s,int n)
{
string ret = "^";
for (int i = 0; i < n; i++)
ret += "#" + s.substr(i, 1);
ret += "#$";
return ret;
}
void solve(string s)
{
string str = convert(s,s.length());
int n = str.length();
int pall[n];
for(int i=0;i<n;i++)
pall[i]=0;
int center = 0, right = 0;
for (int i = 1; i < n-1; i++)
{
int i_mirror = 2*center-i;
pall[i] = (right > i) ? min(right-i, pall[i_mirror]) : 0;
while (str[i + 1 + pall[i]] == str[i - 1 - pall[i]])
pall[i]++;
if (i + pall[i] > right)
{
center = i;
right = i + pall[i];
}
}
int ans=0;
for(int i=0;i<n;i++)
{
ans+=((pall[i]+1)/2);
cout<<pall[i]<<" ";
}
printf("%d\n",ans);
}
int main()
{
int test;
string ip;
scanf("%d",&test);
while(test--)
{
cin>>ip;
solve(ip);
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RyaW5nIGNvbnZlcnQoc3RyaW5nIHMsaW50IG4pIAp7CglzdHJpbmcgcmV0ID0gIl4iOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgkJcmV0ICs9ICIjIiArIHMuc3Vic3RyKGksIDEpOwoJcmV0ICs9ICIjJCI7CglyZXR1cm4gcmV0Owp9CnZvaWQgc29sdmUoc3RyaW5nIHMpIAp7CglzdHJpbmcgc3RyID0gY29udmVydChzLHMubGVuZ3RoKCkpOwoJaW50IG4gPSBzdHIubGVuZ3RoKCk7CglpbnQgcGFsbFtuXTsKCWZvcihpbnQgaT0wO2k8bjtpKyspCgkJcGFsbFtpXT0wOwoJaW50IGNlbnRlciA9IDAsIHJpZ2h0ID0gMDsKCWZvciAoaW50IGkgPSAxOyBpIDwgbi0xOyBpKyspIAoJewoJCWludCBpX21pcnJvciA9IDIqY2VudGVyLWk7CgkJcGFsbFtpXSA9IChyaWdodCA+IGkpID8gbWluKHJpZ2h0LWksIHBhbGxbaV9taXJyb3JdKSA6IDA7CgkJd2hpbGUgKHN0cltpICsgMSArIHBhbGxbaV1dID09IHN0cltpIC0gMSAtIHBhbGxbaV1dKQoJCQlwYWxsW2ldKys7CgkJaWYgKGkgKyBwYWxsW2ldID4gcmlnaHQpIAoJCXsKCQkJY2VudGVyID0gaTsKCQkJcmlnaHQgPSBpICsgcGFsbFtpXTsKCQl9Cgl9CglpbnQgYW5zPTA7Cglmb3IoaW50IGk9MDtpPG47aSsrKQoJewoJCWFucys9KChwYWxsW2ldKzEpLzIpOwoJCWNvdXQ8PHBhbGxbaV08PCIgICI7Cgl9CglwcmludGYoIiVkXG4iLGFucyk7Cn0KaW50IG1haW4oKQp7CglpbnQgdGVzdDsKCXN0cmluZyBpcDsKCXNjYW5mKCIlZCIsJnRlc3QpOwoJd2hpbGUodGVzdC0tKQoJewoJCWNpbj4+aXA7CgkJc29sdmUoaXApOwoJfQoJcmV0dXJuIDA7Cn0=