小苯的括号疑问
题号:NC285654
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯有一个只含有 \texttt{\texttt{ 括号串 s
\hspace{15pt}原本的 s合法的括号序列,但粗心的小苯不小心将其打乱了,导致有一些位置的括号变成相反的括号,比如有些位置原本是 \texttt{,打乱后变成了 \texttt{;有些位置本身是 \texttt{,打乱后变成了 \texttt{
\hspace{15pt}现在小苯只记得打乱后的括号结果 t,他想将 t 复原为 s,但有可能复原结果不唯一,请你帮帮他吧。(如果不存在合法的复原结果,则说明小苯记错了 t 的样子,输出 \texttt{-1} 即可。)

合法括号串的定义:
\hspace{15pt}如果在括号序列中插入字符 \texttt{+}\tt 1 就可以得到正确的算术表达式,那么这个括号序列就称为合法的括号序列。例如,\texttt{\texttt{\texttt{合法的括号序列,因为填入内容后可以表示为 \texttt{\texttt{\texttt{
\hspace{15pt}更严格地,一个括号序列被称为合法的括号序列,当且仅当:
{\hspace{23pt}}_\texttt{1.}\, 空串是合法的括号序列;
{\hspace{23pt}}_\texttt{2.}\, 如果 A 是合法的括号序列,那么 \texttt{ 也是合法的括号序列;
{\hspace{23pt}}_\texttt{3.}\, 如果 AB 都是合法的括号序列,那么 AB 也是合法的括号序列。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^3\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}在一行上输入一个长度不超过 10^6 ,仅由 \texttt{\texttt{ 组成的括号串 t 代表打乱后的括号序列。

\hspace{15pt}除此之外,保证单个测试文件的 t 的字符数量之和不超过 2 \times 10^6

输出描述:

\hspace{15pt}对于每一组测试数据:
\hspace{23pt}\bullet\, 如果复原结果唯一,则输出这个唯一的复原结果,即 s 括号串。
\hspace{23pt}\bullet\, 如果复原结果不唯一,则输出 \textrm{There are multiple solutions}
\hspace{23pt}\bullet\, 如果不存在任何合法的复原结果,则输出 -1
示例1

输入

复制
3
((
)
())(()()()())))((()())()

输出

复制
()
-1
There are multiple solutions