#CF2089D. 条件运算符

条件运算符

D. 条件运算符
每个测试点时间限制:2 秒
内存限制:256 兆字节

在 C++ 中,三元条件运算符 ?: 的值为:若 xx 为真,则 x?y:z 的值为 yy;否则为 zz。其中 xxyyzz 本身也可以是表达式。该运算符右结合,即 a?b:c?d:e 等价于 a?b:(c?d:e)00 表示假,11 表示真。

给定一个长度为 2n+12n+101 字符串,你需要判断是否存在一种方式,在字符串中插入 nn 个三元条件运算符(以及必要的括号),使得最终的表达式值为 11。你可以任意添加括号,但原字符串中字符的顺序必须保持不变。

例如:字符串 10101 可以转换为 (1?0:1)?0:1,其值为 11


输入格式

第一行包含一个整数 tt1t100001 \le t \le 10000),表示测试用例数量。每个测试用例描述如下:

  • 第一行一个整数 nn1n1.5×1051 \le n \le 1.5 \times 10^5)。
  • 第二行一个长度为 2n+12n+1 的二进制字符串。

保证所有测试用例的 nn 之和不超过 1.5×1051.5 \times 10^5


输出格式

对于每个测试用例:

  • 第一行输出 YesNo,表示能否得到值为 11 的表达式。
  • 如果答案是 Yes,则在第二行输出该表达式。你可以使用括号,但不能改变原字符串中字符的相对顺序。你的表达式长度不能超过 10n+100010n + 1000

示例输入

2
2
10101
2
00000

示例输出

Yes
(1?0:1)?(0):1
No

提示

  • 第一个测试用例即题目描述中给出的例子。
  • 第二个测试用例显然无论怎样使用条件运算符,结果总是 00