给定一个由小写字母和 ? 组成的字符串,? 可以表示任意小写字母。你需要是将这个字符串分割成尽可能少的回文子串。求出最少可以分割成多少个回文子串,并计算填充所有 ? 后再分割的方案数,两种方案不同当且仅当填充 ? 的方式不同或者划分序列的方式不同。最终的分割方案数需要对 998244353 取模后输出。
对于两个长度均为 k 的分割序列 [s1,s2,…,sk] 和 [t1,t2,…,tk] 来说,称它们不同当且仅当存在一个下标 i(1≤i≤k),使得 si=ti。
对于一个长度为 n 的字符串 s 来说,s 的一个子串为存在两个下标 l,r(1≤l≤r≤∣s∣),那么 sl…sr 就是 s 的一个子串。例如字符串 "abc" 的子串有 "a","b","c","ab","bc","abc",但是 "ac","cb","ba","d" 都不是字符串 "abc" 的子串。
如果一个字符串从前向后读和从后向前读得到的序列是一样的,那么这个字符串就是一个回文串。例如,"madam" 和 "racecar" 都是回文串,但是 "love" 和 "seu" 都不是回文串。
对于 k 个字符串 [s1,s2,…,sk] 来说,把它们按顺序拼接起来得到的结果为 s1+s2+⋯+sk,例如 "a"+"bb"+"ccc"="abbccc"。