Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии строка $$$s$$$ может содержать символы ?.
Для строки $$$w_1w_2 \ldots w_n$$$, состоящей из символов 0 и 1, определим $$$f(w)$$$ как количество перестановок $$$p_1, p_2, \ldots, p_n$$$ массива $$$[0, 1, \ldots, n-1]$$$, что для всех $$$i$$$ от $$$1$$$ до $$$n$$$ выполнено следующее:
Дана строка $$$s_1s_2 \ldots s_n$$$, состоящая из символов 0, 1 и ?, и целое положительное число $$$c$$$. Рассмотрим все строки $$$w$$$, которые можно получить из $$$s$$$, заменой всех символов ? на символы 0 и 1. Найдите наименьшее значение $$$f(w)$$$ среди всех таких строк $$$w$$$, не делящееся на $$$c$$$, или определите, что такой строки $$$w$$$ нет. Так как ответ может быть большим, найдите его по модулю $$$10^9+7$$$.
$$$^{\text{∗}}$$$Наименьшее исключенное (MEX) набора чисел $$$c_1, c_2, \ldots, c_k$$$ определяется как наименьшее неотрицательное целое число $$$x$$$, которое не встречается в наборе чисел $$$c$$$.
Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 10^4$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.
Первая строка описания набора входных данных содержит два целых числа $$$n$$$ и $$$c$$$ ($$$3 \leq n \leq 2 \cdot 10^5$$$, $$$1 \leq c \leq 10^9$$$) — длина строки и число, ограничивающее значение функции.
Вторая строка каждого описания набора входных данных содержит строку длины $$$n$$$, состоящую из символов 0, 1 и ? — строка $$$s$$$.
Гарантируется, что сумма $$$n$$$ по всем наборам входных данных не превосходит $$$2 \cdot 10^5$$$.
Для каждого набора выходных данных, если существует такая строка $$$w$$$, которую можно получить из $$$s$$$, заменой всех символов ? на символы 0 и 1, что $$$f(w)$$$ не делится на $$$c$$$, то выведите минимальное значение $$$f(w)$$$ среди всех таких строк $$$w$$$. Ответ нужно вывести по модулю $$$10^9+7$$$. Если такой строки не существует, то выведите $$$-1$$$.
103 300?3 1???4 10010013 3???6 1001110016 1001111015 8100?14 1001??020 25303449610001100011000??????3 41?1
-1-142966412-18332861052
Во втором наборе входных данных не существует подходящей строки $$$w$$$, ведь $$$f(w)$$$ всегда делится на $$$1$$$.
В третьем наборе входных данных мы можем взять только $$$w = s$$$, и тогда $$$f(w) = 4$$$, т.к. есть ровно $$$4$$$ подходящие перестановки:
В седьмом наборе входных данных можно взять строку $$$w = \mathtt{10001}$$$, тогда $$$f(w)$$$ будет равно $$$12$$$. Одна из подходящих перестановок: $$$[0, 4, 3, 2, 1]$$$, а, например, перестановка $$$[0, 1, 2, 3, 4]$$$ не подходит. Можно показать, что $$$12$$$ это наименьшее значение, не делящееся на $$$8$$$, которое можно получить.