AT_arc060_d [ARC060F] 最良表現

Description

[problemUrl]: https://atcoder.jp/contests/arc060/tasks/arc060_d $ x $ を長さ $ 1 $ 以上の文字列とします。 いかなる文字列 $ y $ および $ 2 $ 以上の整数 $ k $ に対しても、 $ y $ を $ k $ 回繰り返した文字列が $ x $ と異なるならば、 $ x $ を*良い文字列*であると呼ぶことにします。 例えば、`a`, `bbc`, `cdcdc` などは良い文字列ですが、 `aa`, `bbbb`, `cdcdcd` などは良い文字列ではありません。 $ w $ を長さ $ 1 $ 以上の文字列とします。 $ m $ 項からなる列 $ F=(\,f_1,\,f_2,\,...,\,f_m) $ について、 次の条件がともに満たされるならば、$ F $ を $ w $ の*良い表現*と呼ぶことにします。 - すべての $ i\ \,\ (1\ \leq\ i\ \leq\ m) $ について、$ f_i $ は良い文字列である。 - $ f_1,\,f_2,\,...,\,f_m $ をこの順に連結すると $ w $ になる。 例えば、$ w= $`aabb` の場合、$ w $ の良い表現は次の $ 5 $ つとなります。 - $ ( $`aabb`$ ) $ - $ ( $`a`$ , $`abb`$ ) $ - $ ( $`aab`$ , $`b`$ ) $ - $ ( $`a`$ , $`ab`$ , $`b`$ ) $ - $ ( $`a`$ , $`a`$ , $`b`$ , $`b`$ ) $ 文字列 $ w $ の良い表現のうち、項数 $ m $ が最小であるものを、 $ w $ の*最良表現*と呼ぶことにします。 例えば、$ w= $`aabb` の最良表現は $ ( $`aabb`$ ) $ の $ 1 $ つのみとなります。 文字列 $ w $ が与えられます。次の $ 2 $ つを求めてください。 - $ w $ の最良表現の項数 - $ w $ の最良表現の総数を $ 1000000007\ \,\ (=10^9+7) $ で割った余り なお、$ w $ に対し、良い表現が存在することは保証されます。

Input Format

N/A

Output Format

N/A

Explanation/Hint

### 制約 - $ 1\ \leq\ |w|\ \leq\ 500000\ \,\ (=5\ \times\ 10^5) $ - $ w $ は英小文字 (`a`-`z`) のみからなる文字列である ### 部分点 - $ 1\ \leq\ |w|\ \leq\ 4000 $ を満たすデータセットに正解した場合は、$ 400 $ 点が与えられる。 ### Sample Explanation 2 \- この入力に対しては、項数が $ 2 $ の最良表現が以下の $ 3 $ 通り存在します。 - $ ( $`b`$ , $`cbc`$ ) $ - $ ( $`bc`$ , $`bc`$ ) $ - $ ( $`bcb`$ , $`c`$ ) $