有一个长度为$$$n$$$的二进制字符串,我们将$$$k$$$个连续的字符分为一组,即第$$$1$$$个字符到第$$$k$$$个分为一组,第$$$k+1$$$个字符到第$$$2k$$$个字符为一组...保证$$$n$$$为$$$k$$$的倍数。你需要翻转('0'变成'1','1'变成'0')其中的一些字符,使得任意一组内的字符全部相等,在翻转次数最少的前提下,我们希望最终字符串被分成的'01'段的数量也最少。不仅如此,你还需要求出在满足前两个前提下,翻转的方案数有多少。
不同的翻转方案指的是翻转后的两个字符串在任何一个位置不同。
'01'段是指字符串以子段内全部字符相同为前提下最少划分的段数,例如'00100111'被划分成$$$4$$$个'01'段,'00000000'被划分成$$$1$$$个'01'段。
举个例子: 当$$$n=4,k=1$$$时,对于二进制字符串'0010',最少需要翻转$$$0$$$次,最少分成的分成的'01'段的数量为$$$3$$$段,翻转方案数为$$$1$$$种。 当$$$n=8,k=4$$$时,对于二进制字符串'00110101',最少需要翻转$$$4$$$次,最少分成的分成的'01'段的数量为$$$1$$$段,翻转方案为$$$2$$$种,即把字符串翻转为'00000000'或'11111111',虽然把字符串翻转成'00001111'满足任意一组内的字符全部相等满足且翻转$$$4$$$次,但是此时字符串分成的分成的'01'段的数量为$$$2$$$段,**不满足**被分成的'01'段的数量也最少的条件,所以这不是一种合法的方案。
第一行,一个整数 $$$t(1\le t \le 5·10^5)$$$,代表数据组数。
对于每组数据:
第一行,两个个整数 $$$n,k(1\le n \le 5·10^5;1\le k \le n)$$$,代表二进制字符串的长度与每组字符的字符数,满足$$$n$$$是$$$k$$$的倍数。
第二行是一个长度为$$$n$$$的二进制字符串。
保证 $$$\sum n \le 5·10^5$$$。
对于每个二进制字符串,输出一行三个整数$$$a,b,c$$$,分别代表最少翻转次数、在保持最少翻转次数的前提下分成的'01'段的最少数量、在满足前两个前提下,翻转的方案数有多少。因为$$$a,b,c$$$可能较大,所以你输出答案时需要把三个数对于'998244353'取模。
3 4 1 0010 8 4 00110101 16 2 0100011000011011
0 3 1 4 1 2 5 2 3
对于样例的第$$$1$$$、$$$2$$$组数据的解释见题目描述。
| Название |
|---|


