如果你厌倦了长文题意,可以参考下面的伪代码理解题意。
你有一个数组

表示结点

的父亲结点编号,初始

;另有一个数组

表示结点

的属性(左孩子结点还是右孩子结点)。初始

,

。
即初始的树如右图所示:
接下来给出一个操作序列

,其中会包含三种字符

:
-
操作:对所有上一轮新生成的结点中(初始新生成的结点是
)所有
(左孩子)的结点,生成两个孩子结点,一个左孩子一个右孩子。
-
操作:对所有上一轮新生成的结点中(初始新生成的结点是
)所有
(右孩子)的结点,生成两个孩子结点,一个左孩子一个右孩子。
-
操作:对所有上一轮新生成的结点中(初始新生成的结点是
)所有的结点(不论属性),生成两个孩子结点,一个左孩子一个右孩子。
最终求执行完

次操作序列

后(可以理解成将序列

复制成原来的

倍并依次执行)树的直径长度(树上一条链包含
最多的
结点个数)是多少。
如果你厌倦了长文题意,可以参考下面的伪代码理解题意:
代码中
表示利用
数组求树的直径。
输入描述:
全文第一行输入一行一个正整数
)
,表示数据组数。
接下来对每组数据,第一行输入两个正整数
,分别表示
的长度和操作次数。
第二行输入这个长度为
的操作序列
,由
个仅可能为
、
、
的大写英文字母组成。
输出描述:
每组数据对应一行输出,表示答案。
示例1
说明
对于样例 #2,真正的操作序列实际上是将

执行

次,即

。
样例 #1 和 #2 中,树的形态及答案的求解过程:

样例 #1 中取

即可,样例 #2 中少了

四个结点,因此选择上文所述前五个结点构成的链即可。