AT_kupc2016_g 試験

Description

[problemUrl]: https://atcoder.jp/contests/kupc2016/tasks/kupc2016_g 京都大学の一般入試を翌日に控えているあなたは, 試験に出題されそうな文字列集合 $ S $ を覚えることにした. しかし,$ S $ を覚えるのは面倒なので,代わりに語呂合わせとして文字列 $ T $ を覚えることにして, $ S $ と $ T $ について以下の条件を満たすことを確認した. - 任意の $ S $ の要素は $ T $ の**連続する**部分文字列(1) である. - 任意の $ S $ の要素の組 $ x $, $ y $ $ (x\ \neq\ y) $ について, $ x $ は $ y $ の部分列(2) でない. ただし,(1) は「連続する部分列」であり,(2) は「部分列」であることに注意されたい. 翌日,試験が開始して答案用紙を開くと,どうやら $ S $ さえ覚えていれば満点を取れそうだということがわかった. しかし,あなたは文字列 $ T $ から $ S $ への復元のしかたを忘れてしまった. 文字列 $ T $ の他に上の条件を満たすことだけは覚えているので, まずは $ S $ の要素数としてありえる最大値を求めることにした.

Input Format

入力は以下の形式で標準入力から与えられる. > $ T $ 入力は文字列 $ T $ の 1 行のみからなる.

Output Format

$ S $ の要素数の最大値を出力せよ.

Explanation/Hint

### 制約 - $ 1\ \leq\ |T|\ \leq\ 10^5 $ - 含まれる文字の種類は半角アルファベット小文字のみ ### 部分点 - $ 1\ \leq\ |T|\ \leq\ 50 $ を満たす全てのテストケースに正解した場合,部分点として $ 30 $ 点が与えられる. - $ 1\ \leq\ |T|\ \leq\ 10^3 $ を満たす全てのテストケースに正解した場合,部分点としてさらに $ 30 $ 点が与えられる. ### Sample Explanation 1 このときは, `ab`,`ca`,`bc` と復元した場合が最大となる例の1つである