Это сложная версия задачи. Единственное различие между двумя версиями заключается в ограничениях на $$$k$$$. Делать взломы можно только в том случае, если решены обе версии задачи.
В этой задаче все строки индексируются с $$$0$$$.
Для двух строк $$$a$$$, $$$b$$$ одинаковой длины $$$p$$$ определим следующие термины:
Даны две бинарные строки $$$s$$$ и $$$t$$$ длиной $$$2^{k+1}$$$ каждая. Обе строки могут содержать пропущенные символы (обозначаются символом «?»). Ваша задача — подсчитать количество способов заменить отсутствующие символы в обеих строках на символы «0» или «1» таким образом, чтобы:
Поскольку результат может быть очень большим, выведите его по модулю $$$998\,244\,353$$$.
Первая строка содержит одно целое число $$$k$$$ ($$$1 \le k \le 12$$$).
Вторая строка содержит строку $$$s$$$ длины $$$2^{k+1}$$$, состоящую из символов «0», «1» и «?».
Третья строка содержит строку $$$t$$$ длины $$$2^{k+1}$$$, состоящую из символов «0», «1» и «?».
Гарантируется, что обе строки $$$s$$$ и $$$t$$$ содержат не более $$$2^k$$$ символов «0» или «1».
Выведите одно целое число — ответ на задачу по модулю $$$998\,244\,353$$$.
1 0011 0101
1
1 0011 0110
0
1 0??1 01??
2
2 000????? 01010101
3
2 0??????? 1???????
68
5 0101010101010101010101010101010101010101010101010101010101010101 ????????????????????????????????????????????????????????????????
935297567
В первом примере можно проверить, что для всех циклических сдвигов $$$c$$$ из $$$t$$$ выполняется условие $$$h(s, c) \ge 2^k$$$. В частности:
Во втором примере существует циклический сдвиг $$$c$$$ строки $$$t$$$ такой, что $$$h(s, c) < 2^k$$$ (в частности, $$$c = \mathtt{0011}$$$, и $$$h(s, c) = h(\mathtt{0011}, \mathtt{0011}) = 0$$$).
В третьем примере существует $$$2$$$ возможных способа восстановления недостающих символов:
В четвертом примере существует $$$3$$$ возможных способа восстановления пропущенных символов:
Название |
---|