#CF1374C. 移动括号

移动括号

C. 移动括号

每次测试的时间限制:11
内存限制:256256 兆字节

给定一个长度为 nn 的括号序列 ss,其中 nn 是偶数。字符串 ss 由恰好 n2\frac{n}{2} 个开括号 '('n2\frac{n}{2} 个闭括号 ')' 组成。

在一次移动中,你可以选择恰好一个括号,并将其移动到字符串的开头或结尾(也就是说,你选择一个索引 ii,移除 ss 的第 ii 个字符,然后将其插入到 ss 中其余所有字符的前面或后面)。

你的任务是找出从 ss 得到正则括号序列所需的最少移动次数。可以证明,在给定约束下答案总是存在的。

回顾一下正则括号序列的定义:

  • "()" 是正则括号序列;
  • 如果 ss 是正则括号序列,那么 "(" + ss + ")" 也是正则括号序列;
  • 如果 sstt 是正则括号序列,那么 s+ts + t 也是正则括号序列。

例如,"()()""(())()""(())""()" 是正则括号序列,而 ")(""()("")))" 不是。

你需要回答 tt 个独立的测试用例。

输入

第一行包含一个整数 tt1t20001 \le t \le 2000)—— 测试用例的数量。接下来是 tt 个测试用例。

每个测试用例的第一行包含一个整数 nn2n502 \le n \le 50)—— 字符串 ss 的长度。保证 nn 是偶数。
每个测试用例的第二行包含字符串 ss,由恰好 n2\frac{n}{2} 个开括号和 n2\frac{n}{2} 个闭括号组成。

输出

对于每个测试用例,输出答案 —— 从 ss 得到正则括号序列所需的最少移动次数。可以证明,在给定约束下答案总是存在的。

示例

输入:

4
2
)(
4
()()
8
())()()(
10
)))((((())

输出:

1
0
1
3

说明

在示例的第一个测试用例中,只需将第一个括号移动到字符串末尾即可。

在示例的第三个测试用例中,只需将最后一个括号移动到字符串开头即可。

在示例的第四个测试用例中,我们可以选择最后三个开括号,将它们移动到字符串开头,得到 "((()))(())"