atcoder#ABC214F. [ABC214F] Substrings

[ABC214F] Substrings

配点 : 500500

問題文

文字列 SS が与えられます。高橋君はこの文字列から以下の手順にしたがって新しい文字列 TT を作ります。

  • まず、SS の文字のうちの一つ以上に印をつける。ただし、印をつけた文字どうしが隣り合ってはならない。
  • 次に、印がついていない文字を全て削除する。
  • 最後に、残った文字列を TT とする。ただし、この時に文字を並び替えてはならない。

TT としてありうる文字列は何種類ありますか? (109+7)(10^9 + 7) で割ったあまりを求めてください。

制約

  • SS は英小文字のみからなる長さ 11 以上 2×1052 \times 10^5 以下の文字列

入力

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

SS

出力

TT としてありうる文字列の種類数を (109+7)(10^9 + 7) で割ったあまりを出力せよ。

abc
4

TT としてありうるものは abcac44 つです。

SS11 文字目のみに印をつけたとき TTa

SS22 文字目のみに印をつけたとき TTb

SS33 文字目のみに印をつけたとき TTc

SS11 文字目と 33 文字目のみに印をつけたとき TTac

となります。例えば 11 文字目と 22 文字目の両方に印をつけることはできないことに注意してください。

aa
1

TT としてありうるものは a のみです。 印をつけた位置が異なっていても TT が同じ文字列となる可能性があることに注意してください。

acba
6

TT としてありうるものは abcaaabca66 つです。

chokudai
54