No.599 回文かい

レベル : / 実行時間制限 : 1ケース 4.000秒 / メモリ制限 : 256 MB / 通常問題
タグ : / 解いたユーザー数 45
作問者 : koyumeishikoyumeishi / テスター : confconf
1 ProblemId : 1171 / 出題時の順位表

問題文

"水道水" は回文
それ 回文かい!

文字列 $S$ を $k (\geq 1)$ 個の空でない部分文字列に分解し、 先頭から順に $ T_1, T_2, \dots , T_k $ とします。
($ S = T_1 + T_2 + \dots + T_k $ , $ |T_i| \geq 1 $)
全ての $i (1 \leq i \leq k)$ について $T_i = T_{k-i+1}$ が成り立つとき、 列$T( = [T_1,T_2,\dots,T_k] )$ は文字列 $S$ の 回文かい分解 であるといいます。

文字列 $S$ が与えられるので、 何通りの 回文かい分解 が考えられるか計算してください。
答えが非常に大きくなる場合があるので、 $1,000,000,007$ で割った余りを出力してください。

入力

$S$

$S$ は次の制約を満たします。
$1 \leq |S| \leq 10^4$
$S$ は 小文字のアルファベット 'a' - 'z' のみで構成される

出力

何通りの 回文かい分解 が考えられるか、$1,000,000,007$ で割った余りを出力してください。

サンプル

サンプル1
入力
abc
出力
1

T = ["abc"] が 回文かい分解 になります。

サンプル2
入力
suidousui
出力
2

T = ["suidousui"]
T = ["sui", "dou", "sui"]

サンプル3
入力
kaibunkaibunkai
出力
3

T = ["kaibunkaibunkai"]
T = ["kai", "bunkaibun", "kai"]
T = ["kai", "bun", "kai", "bun", "kai"]

サンプル4
入力
aaaaa
出力
4

T = ["aaaaa"]
T = ["aa", "a", "aa"]
T = ["a", "aaa", "a"]
T = ["a", "a", "a", "a", "a"]

提出ページヘ
下のフォームでの入力は、テキストボックスにフォーカスがない場合は、(Onにしている場合)ショートカットキー・スマートサブミットの影響を受けるので、必要なら提出ページに遷移してください。

言語
問題によって提出できない言語があります。参考
ソースコード
ソースコードのテキストボックスに文字がある場合はファイルは無視されます。
テキストボックスで提出するとCR(\r)が除去されますが、ファイルで提出すると除去されません。