atcoder#ARC060D. [ARC060F] 最良表現

[ARC060F] 最良表現

配点 : 900900

問題文

xx を長さ 11 以上の文字列とします。 いかなる文字列 yy および 22 以上の整数 kk に対しても、 yykk 回繰り返した文字列が xx と異なるならば、 xx良い文字列であると呼ぶことにします。 例えば、a, bbc, cdcdc などは良い文字列ですが、 aa, bbbb, cdcdcd などは良い文字列ではありません。

ww を長さ 11 以上の文字列とします。 mm 項からなる列 F=(f1,f2,...,fm)F=(\,f_1,\,f_2,\,...,\,f_m) について、 次の条件がともに満たされるならば、FFww良い表現と呼ぶことにします。

  • すべての i(1im)i \, (1 \leq i \leq m) について、fif_i は良い文字列である。
  • f1,f2,...,fmf_1,\,f_2,\,...,\,f_m をこの順に連結すると ww になる。

例えば、w=w=aabb の場合、ww の良い表現は次の 55 つとなります。

  • ((aabb))
  • ((a,,abb))
  • ((aab,,b))
  • ((a,,ab,,b))
  • ((a,,a,,b,,b))

文字列 ww の良い表現のうち、項数 mm が最小であるものを、 ww最良表現と呼ぶことにします。 例えば、w=w=aabb の最良表現は ((aabb))11 つのみとなります。

文字列 ww が与えられます。次の 22 つを求めてください。

  • ww の最良表現の項数
  • ww の最良表現の総数を 1000000007(=109+7)1000000007 \, (=10^9+7) で割った余り

なお、ww に対し、良い表現が存在することは保証されます。

制約

  • 1w500000(=5×105)1 \leq |w| \leq 500000 \, (=5 \times 10^5)
  • ww は英小文字 (a-z) のみからなる文字列である

部分点

  • 1w40001 \leq |w| \leq 4000 を満たすデータセットに正解した場合は、400400 点が与えられる。

入力

入力は以下の形式で標準入力から与えられる。

ww

出力

出力は 22 行からなる。

  • 11 行目に、ww の最良表現の項数を出力せよ。
  • 22 行目に、ww の最良表現の総数を 10000000071000000007 で割った余りを出力せよ。
aab
1
1
bcbc
2
3
  • この入力に対しては、項数が 22 の最良表現が以下の 33 通り存在します。- ((b,,cbc))
    • ((bc,,bc))
    • ((bcb,,c))
  • ((b,,cbc))
  • ((bc,,bc))
  • ((bcb,,c))
ddd
3
1