G. Наивные разбиения строк
ограничение по времени на тест
10 секунд
ограничение по памяти на тест
1024 мегабайта
ввод
стандартный ввод
вывод
стандартный вывод
And I will: love the world that you've adored; wish the smile that you've longed for. Your hand in mine as we explore, please take me to tomorrow's shore.
— Faye Wong, As Wished

У Коколи есть строка $$$t$$$ длины $$$m$$$, состоящая из строчных латинских букв, и он хотел бы разделить её на части. Он называет пару строк $$$(x, y)$$$ прекрасной тогда и только тогда, когда существует последовательность строк $$$a_1, a_2, \ldots, a_k$$$, такая, что:

  • $$$t = a_1 + a_2 + \ldots + a_k$$$, где $$$+$$$ обозначает конкатенацию строк.
  • Для каждого $$$1 \leq i \leq k$$$ выполняется по крайней мере одно из следующих условий: $$$a_i = x$$$, или $$$a_i = y$$$.

У Коколи есть другая строка $$$s$$$ длины $$$n$$$, состоящая из строчных латинских букв. Теперь, для каждого $$$1 \leq i < n$$$, Коколи хочет, чтобы вы определили, является ли пара строк $$$(s_1s_2 \ldots s_i, \, s_{i+1}s_{i+2} \ldots s_n)$$$ прекрасной.

Обратите внимание: поскольку входные и выходные данные большие, вам, возможно, потребуется оптимизировать их для решения этой задачи.

Например, в C++ достаточно использовать следующие строки в начале функции main():

int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr); std::cout.tie(nullptr);
}
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число $$$T$$$ ($$$1 \leq T \leq 10^5$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа $$$n$$$ и $$$m$$$ ($$$2 \leq n \leq m \leq 5 \cdot 10^6$$$) — длины строк $$$s$$$ и $$$t$$$.

Вторая строка каждого набора входных данных содержит строку $$$s$$$ длины $$$n$$$, состоящую только из строчных латинских букв.

Третья строка каждого набора входных данных содержит строку $$$t$$$ длины $$$m$$$, состоящую только из строчных латинских букв.

Гарантируется, что сумма $$$m$$$ по всем наборам входных данных не превосходит $$$10^7$$$.

Выходные данные

Для каждого набора входных данных выведите бинарную строку $$$r$$$ длины $$$n - 1$$$: для каждого $$$1 \leq i < n$$$, если $$$i$$$-я пара красива, $$$r_i=\texttt{1}$$$; в противном случае, $$$r_i=\texttt{0}$$$. Не выводите пробелы.

Пример
Входные данные
7
3 5
aba
ababa
4 10
czzz
czzzzzczzz
5 14
dream
dredreamamamam
5 18
tcccc
tcctccccctccctcccc
7 11
abababc
abababababc
7 26
aaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaa
19 29
bbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Выходные данные
11
011
0010
0000
010100
111111
110010001100010011
Примечание

В первом наборе входных данных, $$$s = \tt aba$$$, $$$t = \tt ababa$$$.

  • Для $$$i = 1$$$: Коколи может разделить так: $$$t = \texttt{a} + \texttt{ba} + \texttt{ba}$$$, поэтому пара строк $$$(\texttt{a}, \texttt{ba})$$$ прекрасна.
  • Для $$$i = 2$$$: Коколи может разделить так: $$$t = \texttt{ab} + \texttt{ab} + \texttt{a}$$$, поэтому пара строк $$$(\texttt{ab}, \texttt{a})$$$ прекрасна.

Во втором наборе входных данных, $$$s = \tt czzz$$$, $$$t = \tt czzzzzczzz$$$.

  • Для $$$i = 1$$$: Можно доказать, что не существует разбиения $$$t$$$ с использованием строк $$$\texttt{c}$$$ и $$$\texttt{zzz}$$$.
  • Для $$$i = 2$$$: Коколи может разделить $$$t$$$ на $$$\texttt{cz} + \texttt{zz} + \texttt{zz} + \texttt{cz} + \texttt{zz}$$$.
  • Для $$$i = 3$$$: Коколи может разделить $$$t$$$ на $$$\texttt{czz} + \texttt{z} + \texttt{z} + \texttt{z} + \texttt{czz} + \texttt{z}$$$.