atcoder#ARC060D. [ARC060F] 最良表現

[ARC060F] 最良表現

题目描述

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

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

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

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

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

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

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

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

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

输入格式

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

w w

输出格式

出力は 2 2 行からなる。

  • 1 1 行目に、w w の最良表現の項数を出力せよ。
  • 2 2 行目に、w w の最良表現の総数を 1000000007 1000000007 で割った余りを出力せよ。

题目大意

xx是一个长度至少为1的字符串,我们称xx是好的,当且仅当对于任意字符串yy和任意整数k(k2)k(k≥2),由yy复制kk次并连接得到的字符串均与xx不同。 举个例子,abbccdcdc是好串,然而aabbbbcdcdcd不是。

ww是一个长度至少为1的字符串,对于一个由mm个元素组成的序列 F=(f1,f2,...,fm)F=(f_1,f_2,...,f_m),我们称FFww的一个“亮眼表现”当且仅当下面的条件同时被满足:

  • 对于任意i(1im)i(1≤i≤m),元素fif_i是一个好串。
  • f1,f2,...,fmf_1,f_2,...,f_m按顺序连接起来得到的字符串就是ww

举个例子,当ww='aabb'时,ww有五个亮眼表现:

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

ww的所有亮眼表现中,元素数量最少的那个(些)亮眼表现被称为ww的“全场最佳”。举个例子,当ww='aabb'时,ww的全场最佳只有一个:(aabb)。

给你一个字符串ww,请计算:

  • ww的一个全场最佳所含的元素数量
  • ww有多少个全场最佳(对1e9+7取模)

(数据保证ww一定存在亮眼表现)

aab
1
1
bcbc
2
3
ddd
3
1

提示

制約

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

部分点

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

Sample Explanation 2

- この入力に対しては、項数が 2 2 の最良表現が以下の 3 3 通り存在します。 - ( ( b, , cbc) ) - ( ( bc, , bc) ) - ( ( bcb, , c) )