AT_abc359_d [ABC359D] Avoid K Palindrome
Description
[problemUrl]: https://atcoder.jp/contests/abc359/tasks/abc359_d
`A`, `B`, `?` からなる $ N $ 文字の文字列 $ S $ が与えられます。
正整数 $ K $ が与えられます。 `A`, `B` からなる文字列 $ T $ が次の条件を満たすとき、$ T $ は**良い文字列**であるということにします。
- $ T $ の長さ $ K $ の連続する部分文字列で、回文であるものが**存在しない**。
$ S $ に含まれる `?` の個数を $ q $ 個とします。 $ q $ 個の `?` をそれぞれ `A`, `B` のどちらかに置き換えて得られる文字列は $ 2\ ^\ q $ 通りありますが、その中に良い文字列がいくつあるか求めてください。
ただし、答えは非常に大きくなる場合があるので、$ 998244353 $ で割った余りを求めてください。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ K $ $ S $
Output Format
答えを出力せよ。
Explanation/Hint
### 制約
- $ 2\leq\ K\leq\ N\leq\ 1000 $
- $ K\leq\ 10 $
- $ S $ は `A`, `B`, `?` からなる文字列
- $ S $ の長さは $ N $
- $ N,K $ は整数
### Sample Explanation 1
与えられた文字列の中に `?` は $ 2 $ 個あります。 $ 2 $ 個の `?` をそれぞれ `A`, `B` のどちらかに置き換えて得られる文字列は次の $ 4 $ 通りあります。 - `ABAAABA` - `ABAABBA` - `ABBAABA` - `ABBABBA` このうち、最初の `ABAAABA` 以外の $ 3 $ つの文字列は、長さ $ 4 $ の回文 `ABBA` を連続する部分文字列として含むため、良い文字列ではありません。 よって、`1` を出力してください。
### Sample Explanation 2
良い文字列の個数を $ 998244353 $ で割った余りを求めることに注意してください。
### Sample Explanation 3
`?` をどのように置き換えても良い文字列にならないこともあります。