#CF1149C. 树生成器™
树生成器™
C. 树生成器™
时间限制:每个测试点 秒
内存限制: 兆字节
Owl Pacino 一直很喜欢树——尤其是无根无权的有根树。他喜欢计算他看到的每一棵树的直径,即树中任意简单路径的最大长度。
Owl Pacino 的猫头鹰朋友们决定送他一个树生成器™——一个能够根据描述生成有根树的强大机器。一个 个顶点的有根树可以用一个长度为 的括号序列来描述,描述方式如下:找到一条从根出发并回到根的路径,该路径每条边恰好遍历两次——一次向下,一次向上。然后沿着路径,如果沿着边向下走,就写下 "("(左括号),否则写下 ")"(右括号)。
下图展示了一些有根树及其描述:

Owl 写下了一棵 个顶点的树的描述。然后他重写了 次该描述。但每次重写时,他会在上一次写下的描述中选取两个不同的字符,交换它们,并写下得到的新字符串。他始终保证每次写下的字符串都是一棵有根树的描述。
然后 Pacino 为他写下的每个描述使用树生成器™。问:每个生成的树的直径是多少?
输入格式
第一行包含两个整数 (,)——树的顶点数和描述修改次数。
接下来一行包含初始树的描述——一个长度为 的字符串,由左括号和右括号组成。
接下来的 行,每行包含两个空格分隔的整数 (),表示要交换的两个括号的索引。你可以假定每次查询后描述会发生变化,并且每次变化后仍能根据该描述构建出一棵树。
输出格式
输出 个整数——按描述被写下的顺序,每个构建出的树的直径。
样例输入 1
5 5
(((())))
4 5
3 4
5 6
3 6
2 5
样例输出 1
4
3
3
2
4
4
样例输入 2
6 4
(((())()))
6 7
5 4
6 4
7 4
样例输出 2
4
4
4
5
3
样例 1 说明
