#include<bits/stdc++.h>
using namespace std;
int * Z_algo(string s,int n){
int *z=new int[n];
int l=0,r=0;
for(int i=1;i<n;i++){
//condition 1
if(i>r){
l=i;
r=i;
while(r<n and s[r-l]==s[r]){
r++;
}
r--;
z[i]=r-l+1;
}
//condition 2
else{
int j=i-l;
//condition 2a
if(z[j]<r-i+1){
z[i]=z[j];
}
//condition 2b
else{
l=i;
while(r<n and s[r-l]==s[r]){
r++;
}
r--;
z[i]=r-l+1;
}
}
}
return z;
}
int main(){
string s="abc$abcdabcfabdabe";
int n=s.size();
int *z=Z_algo(s,n);
for(int i=1;i<n;i++){
cout<<z[i]<<" ";
}
cout<<endl;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCAqIFpfYWxnbyhzdHJpbmcgcyxpbnQgbil7CiAgICBpbnQgKno9bmV3IGludFtuXTsKICAgIGludCBsPTAscj0wOwoKICAgIGZvcihpbnQgaT0xO2k8bjtpKyspewogICAgICAgIC8vY29uZGl0aW9uIDEKICAgICAgICBpZihpPnIpewogICAgICAgICAgICBsPWk7CiAgICAgICAgICAgIHI9aTsKICAgICAgICAgICAgd2hpbGUocjxuIGFuZCBzW3ItbF09PXNbcl0pewogICAgICAgICAgICAgICAgcisrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHItLTsKICAgICAgICAgICAgeltpXT1yLWwrMTsKCiAgICAgICAgfQogICAgICAgIC8vY29uZGl0aW9uIDIKICAgICAgICBlbHNlewogICAgICAgICAgICBpbnQgaj1pLWw7CgogICAgICAgICAgICAvL2NvbmRpdGlvbiAyYQogICAgICAgICAgICBpZih6W2pdPHItaSsxKXsKICAgICAgICAgICAgICAgIHpbaV09eltqXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvL2NvbmRpdGlvbiAyYgogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgbD1pOwogICAgICAgICAgICAgICAgd2hpbGUocjxuIGFuZCBzW3ItbF09PXNbcl0pewogICAgICAgICAgICAgICAgICAgIHIrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHItLTsKICAgICAgICAgICAgICAgIHpbaV09ci1sKzE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gejsKfQoKaW50IG1haW4oKXsKICAgIHN0cmluZyBzPSJhYmMkYWJjZGFiY2ZhYmRhYmUiOwogICAgaW50IG49cy5zaXplKCk7CiAgICBpbnQgKno9Wl9hbGdvKHMsbik7CiAgICBmb3IoaW50IGk9MTtpPG47aSsrKXsKICAgICAgICBjb3V0PDx6W2ldPDwiICI7CiAgICB9CiAgICBjb3V0PDxlbmRsOwogICAgcmV0dXJuIDA7Cn0K