def zpetna_funkce(jehla): J = len(jehla) def krok(stav, znak): if stav < J and jehla[stav] == znak: return stav + 1 if stav > 0: return krok(F[stav - 1], znak) return 0 F = [None] * J F[0] = 0 for i in range(1, J): F[i] = krok(F[i - 1], jehla[i]) return F S = input()[::-1] # Obrátí řetězec N = len(S) F = zpetna_funkce(S) D = [i - F[i] + 1 for i in range(N)] # +1 za indexování od nuly nej_pos, nej_hodnota = None, None for i in range(N): hodnota = D[i] + N - i - 1 if nej_hodnota is None or hodnota < nej_hodnota: nej_pos, nej_hodnota = i, hodnota print(nej_hodnota, S[nej_pos + 1:][::-1], S[:nej_pos + 1][::-1]) # obrátíme zpět