P16308 [ICPC 2023 Jinan R] 很多很多头

题目描述

很多头杯,简称为 MHC,是一项面向拥有$\textbf{很多很多头}$的选手的世界级程序设计竞赛。这场赛事的裁判长小青鱼,正在考虑为每一位选手设计一个身份号码。 “那么,就是它吧,”小青鱼想,“我们来使用一些括号序列!” 他为每个选手分配了一个独一无二的平衡括号序列,每个括号序列包含两种括号------圆括号(也被称为小括号),以及方括号。为了确保您理解平衡括号序列的概念,小青鱼准备了如下平衡括号序列的形式化定义: - $\varepsilon$ (一个空字符串)是一个平衡括号序列。 - 如果 $A$ 是一个平衡括号序列, 那么 $(A)$ 和 $[A]$ 也都是平衡括号序列。 - 如果 $A$ 和 $B$ 是平衡括号序列,那么 $AB$ 也是一个平衡括号序列。 例如,$\tt{()}$, $\tt{[()]}$ 以及 $\tt{[()]()}$ 是平衡括号序列,但 $\tt{)(}$, $\tt{[(])}$ 和 $\tt{[)}$ 不是。 对于我们的很多个头的选手,记住括号序列并不是一项困难的任务。然而,问题出现在了他们独特的能力上:因为他们有太多的头,因此他们无法分辨出括号的方向!结果是,与原来的平衡括号序列相比,他们记忆中的序列可能有部分括号的方向出现了改变。例如,括号序列 $\tt{[()]()}$ 可能会被记忆成 $\tt{]))]))}$ 或 $\tt{]()]))}$。幸运的是,括号的种类仍然保持不变。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/kg379md8.png) ::: 在比赛当天,在小青鱼收到了每位选手的括号序列后,一个问题出现了:原始的括号序列能否被唯一确定?换句话说,小青鱼需要确定给定的括号序列是否对应着唯一一个平衡括号序列。 请帮助小青鱼完成这项任务,来确保我们拥有很多个头的朋友们能够参加比赛!

输入格式

有多组测试数据。第一行输入一个整数 $T$ 表示测试数据组数,对于每组测试数据: 第一行输入一个由 $\tt{(}$, $\tt{)}$,$\tt{[}$,以及 $\tt{]}$ 组成的字符串 $S$ ($1 \leq |S| \leq 10^5$)表示括号序列。 保证: - 所有数据的 $|S|$ 之和不超过 $10^6$. - 每个括号序列都是通过改变某个平衡括号序列的一些括号的方向所得到的。

输出格式

对于每组数据: - 如果给定的括号序列可以对应不止一个平衡括号序列,输出一行 $\tt{No}$。 - 否则,输出一行 $\tt{Yes}$。

说明/提示

对于第一组样例数据,括号序列对应唯一一个平衡括号序列:$\tt{()}$。所以答案是 $\tt{Yes}$。 对于第二组样例数据,括号序列可以对应两个不同的平衡括号序列:$\tt{(())}$ 和 $\tt{()()}$。所以答案是 $\tt{No}$。 对于第三组样例数据,括号序列对应唯一一个平衡括号序列:$\tt{[()]}$。所以答案是 $\tt{Yes}$。 对于第四组样例数据,括号序列可以对应两个不同的平衡括号序列:$\tt{(([()]))}$ 和 $\tt{()[()]()}$。所以答案是 $\tt{No}$。 对于第五组样例数据,括号序列对应唯一一个平衡括号序列:$\tt{([()])}$。所以答案是 $\tt{Yes}$。 对于第六组样例数据,括号序列可以对应三个不同的平衡括号序列:$\tt{([])([])}$, $\tt{([]()[])}$ 和 $\tt{([[()]])}$。所以答案是 $\tt{No}$。