#aBC359D. [ABC359D] Avoid K Palindrome

[ABC359D] Avoid K Palindrome

AT_abc359_d [ABC359D] Avoid K Palindrome

题目描述

给定一个由 AB? 组成的长度为 NN 的字符串 SS

给定一个正整数 KK。如果一个仅由 AB 组成的字符串 TT 满足以下条件,则称 TT好字符串

  • TT 的任意长度为 KK 的连续子串中,都不存在回文串。

SS 中包含 qq?。将这 qq? 分别替换为 AB,一共可以得到 2q2^q 种不同的字符串。请你求出其中有多少种是好字符串。

由于答案可能非常大,请输出答案对 998244353998244353 取模的结果。

输入格式

输入通过标准输入给出,格式如下:

NN KK SS

输出格式

请输出答案。

输入输出样例 #1

输入 #1

7 4
AB?A?BA

输出 #1

1

输入输出样例 #2

输入 #2

40 7
????????????????????????????????????????

输出 #2

116295436

输入输出样例 #3

输入 #3

15 5
ABABA??????????

输出 #3

0

输入输出样例 #4

输入 #4

40 8
?A?B??B?B?AA?A?B??B?A???B?BB?B???BA??BAA

输出 #4

259240

说明/提示

限制条件

  • 2KN10002 \leq K \leq N \leq 1000
  • K10K \leq 10
  • SSAB? 组成
  • SS 的长度为 NN
  • N,KN,K 均为整数

样例解释 1

给定的字符串中有 22?。将这 22? 分别替换为 AB,一共可以得到如下 44 种字符串:

  • ABAAABA
  • ABAABBA
  • ABBAABA
  • ABBABBA 其中,除了第一个 ABAAABA,其余 33 个字符串都包含长度为 44 的回文子串 ABBA,因此不是好字符串。故输出 1

样例解释 2

请注意,要求输出好字符串的个数对 998244353998244353 取模的结果。

样例解释 3

也有可能无论如何替换 ? 都无法得到好字符串。

由 ChatGPT 4.1 翻译