CF2089D Conditional Operators

题目描述

在 C++ 中,条件运算符 `?:` 的使用规则为:表达式 `x?y:z` 的值为 $$$y$$$(若 $$$x$$$ 为真)或 $$$z$$$(若 $$$x$$$ 为假)。其中 $$$x$$$、$$$y$$$ 和 $$$z$$$ 可以是任意表达式。该运算符具有右结合性,即 `a?b:c?d:e` 等价于 `a?b:(c?d:e)`。数值 $$$0$$$ 表示假,$$$1$$$ 表示真。 给定一个长度为 $$$2n+1$$$ 的二进制字符串,请判断在插入 $$$n$$$ 个条件运算符后,该表达式能否计算结果为 $$$1$$$。允许使用括号。例如,字符串 `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$$$。

输出格式

对于每个测试用例: - 若该字符串可被转换为结果为 $$$1$$$ 的表达式,则在第一行输出 `Yes`,并在第二行输出该表达式。允许使用括号,但必须保持原字符串字符顺序,且表达式长度不超过 $$$10n + 1000$$$。 - 否则,在第一行输出 `No`。

说明/提示

第一个测试用例对应题目描述中的示例。 第二个测试用例中,无论如何插入条件运算符,结果始终为 $$$0$$$。 翻译由 DeepSeek R1 完成