#include<iostream>
#include<vector>
#include<string>
#include <climits>
using namespace std;
vector<int> z_function (string str) {
int n = (int) str.length();
vector<int> z (n);
for (int i = 1, l = 0, r = 0; i < n; ++i) {
if (i <= r)
z[i] = min (r - i + 1, z[i - l]);
while (i + z[i] < n && str[z[i]] == str[i + z[i]])
++z[i];
if (i + z[i] - 1 > r)
l = i, r = i + z[i] - 1;
}
return z;
}
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
string str;
cin >> str;
vector<int> z = z_function(str);
for (size_t i = 0; i < str.size(); ++i)
cout << z[i] << (char)32;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8c3RyaW5nPgojaW5jbHVkZSA8Y2xpbWl0cz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiB6X2Z1bmN0aW9uIChzdHJpbmcgc3RyKSB7CglpbnQgbiA9IChpbnQpIHN0ci5sZW5ndGgoKTsKCXZlY3RvcjxpbnQ+IHogKG4pOwoJZm9yIChpbnQgaSA9IDEsIGwgPSAwLCByID0gMDsgaSA8IG47ICsraSkgewoJCWlmIChpIDw9IHIpCgkJCXpbaV0gPSBtaW4gKHIgLSBpICsgMSwgeltpIC0gbF0pOwoJCXdoaWxlIChpICsgeltpXSA8IG4gJiYgc3RyW3pbaV1dID09IHN0cltpICsgeltpXV0pCgkJCSsreltpXTsKCQlpZiAoaSArIHpbaV0gLSAxID4gcikKCQkJbCA9IGksICByID0gaSArIHpbaV0gLSAxOwoJfQoJcmV0dXJuIHo7Cn0KCmludCBtYWluKCkgewogICAgY2luLnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBzdHJpbmcgc3RyOwogICAgY2luID4+IHN0cjsKICAgIHZlY3RvcjxpbnQ+IHogPSB6X2Z1bmN0aW9uKHN0cik7CiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0ci5zaXplKCk7ICsraSkKICAgICAgIGNvdXQgPDwgeltpXSA8PCAoY2hhcikzMjsKfQo=