#P0575. 被操控的括号序列(Rigged Bracket Sequence)
被操控的括号序列(Rigged Bracket Sequence)
题目描述
合法括号序列是只由 ( 和 ) 组成,并且可以通过插入若干个 和 变成合法数学表达式的序列。例如 ()(()()) 是合法括号序列,而 ())(() 和 (() 不是。
给定一个合法括号序列 。
现在考虑把一个子序列向右循环移动。形式化地说,若选择的下标为 ,则这些位置上的字符会同时重新赋值为:
- ;
- ;
- ;
- 。
也就是说,第 个被选位置会得到原来第 个被选位置的字符。
例如,当 为 ()(()()) 时,移动子序列 会把 变成 ((())());移动子序列 会把 变成 ())((())。
请计算有多少个非空子序列在执行这种右移之后,仍能让 保持为合法括号序列。答案对 取模。
子序列可以通过删除原序列中若干个位置得到;若删除的位置集合不同,则认为子序列不同。
输入格式
第一行一个整数 ,表示测试组数。
每组数据第一行一个偶数 。
第二行一个长度为 的合法括号序列 ,字符串中不含空格。
输出格式
对每组数据输出一行一个整数,表示答案对 取模后的结果。
样例
4
2
()
4
()()
6
(()())
10
()((())())
2
8
28
312
说明
第二个样例中,有 个非空子序列移动后仍保持合法括号序列,分别为 、、、、、、、。
数据范围
,,且 为偶数。
所有测试组的 之和不超过 。