#ATarc060d. [ARC060F] 最良表現

[ARC060F] 最良表現

题目描述

xx 为长度至少为 11 的字符串。对于任意字符串 yy 以及大于等于 22 的整数 kk,如果 yy 重复 kk 次得到的字符串与 xx 不同,则称 xx好字符串。例如,abbccdcdc 等是好字符串,而 aabbbbcdcdcd 等不是好字符串。

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)) 这一种。

给定字符串 ww,请你求出以下两项:

  • ww 的最优表示的项数;
  • ww 的最优表示的总数对 1000000007 (=109+7)1000000007\ (=10^9+7) 取模的结果。

保证对于给定的 ww,一定存在好表示。

输入格式

输入为一行,包含字符串 ww

输出格式

输出共两行:

  • 11 行输出 ww 的最优表示的项数。
  • 22 行输出 ww 的最优表示的总数对 10000000071000000007 取模的结果。

样例 1

输入

aab

输出

1
1

样例 2

输入

bcbc

输出

2
3

样例 3

输入

ddd

输出

3
1

说明/提示

限制

  • 1w500000 (=5×105)1\leq |w|\leq 500000\ (=5\times 10^5)
  • ww 仅由小写英文字母(a-z)组成。

部分分

  • 若能正确解决 1w40001\leq |w|\leq 4000 的数据,将获得 400400 分。

样例解释 2

对于该输入,项数为 22 的最优表示共有如下 33 种:

  • ((b,,cbc))
  • ((bc,,bc))
  • ((bcb,,c))

由 ChatGPT 4.1 翻译