Вам дано целое число $$$n$$$ и бинарная строка$$$^{\text{∗}}$$$ $$$s$$$ длины $$$n$$$.
Для перестановки$$$^{\text{†}}$$$ $$$p$$$ длины $$$n$$$ и целого числа $$$x$$$ определим $$$\text{find}(x)$$$ следующим образом в псевдокоде:
function find(int x):
l := 1
r := n
while l <= r:
пусть m — случайное число от l до r (включительно)
if p[m] == x
return m
if p[m] > x:
r := m - 1
else:
l := m + 1
return undefined // не найдено
Назовём целое число $$$x$$$ ($$$1\le x\le n$$$) стабильным, если и только если $$$\text{find}(x)$$$ всегда не равно undefined и $$$p_{\text{find}(x)}=x$$$ всегда выполняется, независимо от того, как выбирается значение $$$m$$$ в процессе выполнения псевдокода.
Вам необходимо построить перестановку $$$p$$$ длины $$$n$$$, такую что:
Или определить, что такой перестановки не существует.
$$$^{\text{∗}}$$$Бинарная строка — это строка, в которой каждый символ является либо $$$\mathtt{0}$$$, либо $$$\mathtt{1}$$$.
$$$^{\text{†}}$$$Перестановкой длины $$$n$$$ является массив, состоящий из $$$n$$$ различных целых чисел от $$$1$$$ до $$$n$$$ в произвольном порядке. Например, $$$[2,3,1,5,4]$$$ — перестановка, но $$$[1,2,2]$$$ не перестановка ($$$2$$$ встречается в массиве дважды) и $$$[1,3,4]$$$ тоже не перестановка ($$$n=3$$$, но в массиве встречается $$$4$$$).
Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 10^4$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.
Первая строка каждого набора входных данных содержит одно целое число $$$n$$$ ($$$2\le n \le 2\cdot 10^5$$$) — длина перестановки.
Вторая строка содержит бинарную строку $$$s$$$ длины $$$n$$$ ($$$s_i=\mathtt{0}$$$ или $$$\mathtt{1}$$$).
Гарантируется, что сумма значений $$$n$$$ по всем наборам входных данных не превосходит $$$2\cdot 10^5$$$.
Для каждого набора входных данных:
Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes», и «YES» будут распознаны как положительные ответы.
Если есть несколько ответов, вы можете вывести любой из них.
6311150000051010070010000110000100110012011100010000
YES1 2 3YES2 4 3 5 1NOYES2 1 3 5 7 6 4YES2 1 4 3 5 7 6 8 9 11 10NO
В первом наборе входных данных мы построили $$$p=[1,2,3]$$$. Возьмём $$$\text{find(2)}$$$ в качестве примера:
Таким образом, $$$p_{\text{find}(2)}= p_2 = 2$$$ всегда выполняется, и целое число $$$2$$$ является стабильным.
Аналогично, мы можем показать, что целые числа $$$1$$$ и $$$3$$$ также являются стабильными. Таким образом, перестановка $$$p = [1, 2, 3]$$$ является допустимым ответом.
Во втором наборе входных данных мы построили $$$p=[2,4,3,5,1]$$$. Возьмём $$$\text{find(3)}$$$ в качестве примера:
Таким образом, возвращаемое значение $$$\text{find}(3)$$$ равно undefined, поэтому целое число $$$3$$$ не является стабильным.
Аналогично, мы можем показать, что целые числа $$$1$$$, $$$2$$$, $$$4$$$ и $$$5$$$ также не являются стабильными. Таким образом, $$$p = [2, 4, 3, 5, 1]$$$ является допустимым ответом.
Некоторые другие перестановки, такие как $$$p=[5,4,3,2,1]$$$ и $$$p=[3,5,1,4,2]$$$, также являются допустимыми ответами. Вы можете напечатать любую из них.
В третьем наборе входных данных можно доказать, что искомой перестановки не существует.