#include
using namespace std;
// z_function is the number of characters ahead that is also the prefix starting from index i
vector z_function(string s) {
int n = s.length();
vector 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 && s[z[i]] == s[i + z[i]])
++z[i];
if (i + z[i] - 1 > r)
l = i, r = i + z[i] - 1;
}
return z;
}
int main(){
string s;
cin >> s;
for(auto z : z_function(s)) cout << z << " ";
}