D. Условные операторы
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В C++ условный оператор ?: используется так: значение x?y:z равно $$$y$$$, если $$$x$$$ истинно; в противном случае значение равно $$$z$$$. $$$x$$$, $$$y$$$ и $$$z$$$ также могут быть выражениями. Он ассоциативен справа; то есть a?b:c?d:e эквивалентно a?b:(c?d:e). $$$0$$$ означает ложь, а $$$1$$$ означает истину.

Дана двоичная строка длиной $$$2n+1$$$, необходимо показать, может ли значение выражения быть $$$1$$$ после вставки $$$n$$$ условных операторов в строку. Вы можете использовать скобки. Например, строку 10101 можно преобразовать в (1?0:1)?0:1, значение которой равно $$$1$$$.

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

Первая строка содержит одно целое число $$$t$$$ ($$$1 \le t \le 10\,000)$$$, количество наборов входных данных. Далее следует их описание.

В первой строке набора входных данных содержится одно целое число $$$n$$$ ($$$1 \le n \le 1.5 \cdot 10^5)$$$.

Во второй строке каждого набора входных данных записана двоичная строка длины $$$2n + 1$$$.

Гарантируется, что сумма $$$n$$$ по всем наборам входных данных не превосходит $$$1.5 \cdot 10^5$$$).

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

Для каждого набора входных данных в первой строке выведите Yes, если строку можно преобразовать в выражение со значением $$$1$$$; в противном случае выведите No.

Если ответ Yes, выведите выражение во второй строке. Вы можете использовать скобки, но порядок символов в исходной строке должен оставаться прежним. Длина вашего выражения не должна превышать $$$10n+1000$$$.

Пример
Входные данные
2
2
10101
2
00000
Выходные данные
Yes
(1?0:1)?(0):1
No
Примечание

Первый набор входных данных — это тот, который упоминается в описании задачи.

Во втором наборе входных данных очевидно, что независимо от того, как использовать условный оператор, результат всегда будет нулем.