問題文

N+1N + 1 個のマスが一列に並んでおり,順に 0,1,,N0, 1, \ldots, N の番号が付けられています. また ox のみからなる長さ N+1N + 1 の文字列 S=S0S1SNS = S_0 S_1 \cdots S_N が与えられ,SiS_io のときマス ii に石がないことを,SiS_ix のときマス ii に石があることを表します.マス 00 とマス NN には石がないことが保証されます.

三段跳びが得意な高橋君はマス 00 からスタートし,以下の操作を 00 回以上好きな回数繰り返すことでマス NN でちょうど停止することを目指します.

  • 正整数 kk を 1 つ選ぶ.
  • 現在位置をマス ii とする.マス i+2ki + 2 k が存在しそこに石がないならばマス i+2ki + 2 k に移動する.さもなくば転倒する.
  • 現在位置をマス ii とする.マス i+3ki + 3 k が存在しそこに石がないならばマス i+3ki + 3 k に移動する.さもなくば転倒する.
  • 現在位置をマス ii とする.マス i+5ki + 5 k が存在しそこに石がないならばマス i+5ki + 5 k に移動する.さもなくば転倒する.

なお操作は続けて行われ,中断することはできません.

高橋君が転倒することなくマス 00 からマス NN に移動する方法が何通りあるか求めてください. 答えは非常に大きくなることがあるので,答えを 998244353998244353 で割った余りを出力してください.

制約

  • 1N1.4×1051 \leq N \leq 1.4 \times 10^5
  • NN は整数
  • SSox のみからなる長さ N+1N + 1 の文字列
  • S0=S_0 = oSN=S_N = o

入力

入力は以下の形式で標準入力から与えられます.

NN
SS

出力

答えを 998244353998244353 で割った余りを出力してください.最後に改行してください.

サンプル

入力1
20
oxooxoooooooooooooxxo
出力1
1

最初の操作で k=1k = 1 と選ぶと

  • 現在位置はマス 00 である.マス 0+2×1=20 + 2 \times 1 = 2 は存在し,S2=S_2 = o よりそこに石はないのでマス 22 に移動する.
  • 現在位置はマス 22 である.マス 2+3×1=52 + 3 \times 1 = 5 は存在し,S5=S_5 = o よりそこに石はないのでマス 55 に移動する.
  • 現在位置はマス 55 である.マス 5+5×1=105 + 5 \times 1 = 10 は存在し,S10=S_{10} = o よりそこに石はないのでマス 1010 に移動する.

としてマス 1010 に移動でき,次の操作で k=1k = 1 と選ぶと

  • 現在位置はマス 1010 である.マス 10+2×1=1210 + 2 \times 1 = 12 は存在し,S12=S_{12} = o よりそこに石はないのでマス 1212 に移動する.
  • 現在位置はマス 1212 である.マス 12+3×1=1512 + 3 \times 1 = 15 は存在し,S15=S_{15} = o よりそこに石はないのでマス 1515 に移動する.
  • 現在位置はマス 1515 である.マス 15+5×1=2015 + 5 \times 1 = 20 は存在し,S20=S_{20} = o よりそこに石はないのでマス 2020 に移動する.

としてマス N=20N = 20 に移動できます.

一方最初の操作で k=2k = 2 と選ぶと

  • 現在位置はマス 00 である.マス 0+2×2=40 + 2 \times 2 = 4 は存在するが,S4=S_4 = x よりそこに石があるので転倒する.

となり転倒してしまいます.

また最初の操作で k=10k = 10 と選ぶと

  • 現在位置はマス 00 である.マス 0+2×10=200 + 2 \times 10 = 20 は存在し,S20=S_{20} = o よりそこに石はないのでマス 2020 に移動する.
  • 現在位置はマス 2020 である.マス 20+3×10=5020 + 3 \times 10 = 50 は存在しないので転倒する.

となり転倒してしまいます(操作は中断できません).

転倒しない移動方法は冒頭で述べた 11 通りのみなので,11998244353998244353 で割った余りである 11 を出力してください.

Submit


Go (1.21)