Codeforces Round 661 (Div. 3) |
---|
Закончено |
Вам задана бинарная строка $$$s$$$, состоящая из $$$n$$$ нулей или единиц.
Ваша задача – разделить заданную строку на минимальное число подпоследовательностей таким образом, что каждый символ строки принадлежит ровно одной подпоследовательности и каждая подпоследовательность выглядит подобно «010101 ...» или «101010 ...» (т.е. подпоследовательность не должна содержать два соседних нуля или единицы).
Напомним, что подпоследовательность — это последовательность, которая может быть получена путем удаления из заданной последовательности с помощью удаления нуля или более элементов без изменения порядка остальных элементов. Например, подпоследовательностями «1011101» являются «0», «1», «11111», «0111», «101», «1001», но не «000», «101010» и «11100».
Вам необходимо ответить на $$$t$$$ независимых наборов тестовых данных.
Первая строка теста содержит одно целое число $$$t$$$ ($$$1 \le t \le 2 \cdot 10^4$$$) — количество наборов тестовых данных. Затем следуют $$$t$$$ наборов тестовых данных.
Первая строка набора тестовых данных содержит одно целое число $$$n$$$ ($$$1 \le n \le 2 \cdot 10^5$$$) — длину $$$s$$$. Вторая строка набора тестовых данных содержит $$$n$$$ символов '0' и '1' — строку $$$s$$$.
Гарантируется, что сумма всех $$$n$$$ не превосходит $$$2 \cdot 10^5$$$ ($$$\sum n \le 2 \cdot 10^5$$$).
Для каждого набора тестовых данных выведите ответ на него: первой строкой выведите одно целое число $$$k$$$ ($$$1 \le k \le n$$$) — минимальное количество подпоследовательностей, на которые вы можете разделить строку $$$s$$$. Второй строкой выведите $$$n$$$ целых чисел $$$a_1, a_2, \dots, a_n$$$ ($$$1 \le a_i \le k$$$), где $$$a_i$$$ — номер подпоследовательности, к которой принадлежит $$$i$$$-й символ строки $$$s$$$.
Если существует несколько ответов, вы можете вывести любой.
4 4 0011 6 111111 5 10101 8 01010000
2 1 2 2 1 6 1 2 3 4 5 6 1 1 1 1 1 1 4 1 1 1 1 1 2 3 4
Название |
---|