const int N = 1e5+7; char s[N]; int F[N], Z[N], M[N]; int sa[N]; int ord[N], tmp[N], cnt[N]; int lcp[N]; int main() { scanf("%s", s+1); int n = strlen(s+1); // KMP - fail function { F[1] = 0; int j = 0; for(int i=2; i<=n;i++) { while(j > 0 and s[i] != s[j+1]) j = F[j]; F[i] = j+=(s[i] == s[j+1]); } } //Z - Z array { Z[1] = n; int j = 1, r = 0; for(int i=2; i<=n; i++) { Z[i] = i 0) k--; } } printf("\nF : "); forr(i, n) printf("%d ", F[i]); printf("\nZ : "); forr(i, n) printf("%d ", Z[i]); printf("\nM : "); forr(i, n) printf("%d ", M[i]); printf("\nSA : "); forr(i, n) printf("%d ", sa[i]); printf("\nLCP : x "); fors(i, 2, n) printf("%d ", lcp[i]); printf("\n"); forr(i, n) printf("%s\n", s+sa[i]); }