atcoder#ABC304F. [ABC304F] Shift Table

[ABC304F] Shift Table

配点 : 525525

問題文

高橋君と青木君は、これから NN 日間アルバイトをします。 高橋君のシフト表は文字列 SS により与えられ、SSii 文字目が # のとき ii 日目に出勤、. のとき ii 日目に欠勤します。 これをもとに、青木君は以下のようにシフト表を作りました。

  • まず、NN でない NN の正の約数 MM をとる。
  • 次に、11 日目から MM 日目までの勤怠を決める。
  • 最後に、i=1,2,,NMi = 1, 2, \ldots, N - M の順に M+iM + i 日目の勤怠が ii 日目の勤怠と一致するように M+iM + i 日目の勤怠を決める。

ここで、MM の値が異なる場合でも最終的にできたシフトが同じものとなることがあることに注意してください。

NN 日すべてについて高橋君と青木君の少なくとも一方が出勤することになったとき、青木君のシフト表として考えられるものの個数を 998244353998244353 で割った余りを求めてください。

制約

  • NN22 以上 10510^5 以下の整数
  • SS は 長さ NN#. からなる文字列

入力

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

NN

SS

出力

答えを出力せよ。

6
##.#.#
3

高橋君は 12461 \cdot 2 \cdot 4 \cdot 6 日目に出勤します。 青木君のシフト表を表す文字列を TT とし、青木君は TTii 文字目が # のとき ii 日目に出勤、. のとき ii 日目に欠勤するとします。 TT としてあり得るものは ###### \cdot #.#.#. \cdot .##.##33 つです。

11 つめのシフト表は MM11 または 22 または 3322 つめのシフト表は M=2M = 233 つめのシフト表は M=3M = 3 とすることにより実現できます。

7
...####
1
12
####.####.##
19