给定一棵树,树有 $n$ 个顶点,编号从 $1$ 到 $n$。
我们将顶点 $a$ 和 $b$ 之间的路径记为 $(a, b)$。路径的 $d$-集定义为树中距离路径上至少一个顶点的距离不超过 $d$ 的所有顶点的集合。例如,路径的 $0$-集就是该路径上的所有顶点。顶点之间的距离定义为它们在树上路径的边数。
设 $S$ 为树上路径的多重集。初始时,$S$ 为空。你需要处理以下查询:
- “1 $u$ $v$”:将路径 $(u, v)$ 加入 $S$ ($1 \le u, v \le n$)。
- “2 $u$ $v$”:从 $S$ 中删除一条路径 $(u, v)$ ($1 \le u, v \le n$)。注意 $(u, v)$ 和 $(v, u)$ 表示同一条路径。例如,如果 $S = \{(2, 3), (2, 3)\}$,执行查询 “2 3 2” 后,$S = \{(2, 3)\}$。保证在执行此查询前,$S$ 中至少存在一条路径 $(u, v)$ 或 $(v, u)$。
- “3 $d$”:输出 $S$ 中所有路径的 $d$-集的交集大小 ($0 \le d \le n$)。如果 $S$ 为空,输出 $0$。
输入格式
第一行包含一个整数 $t$,表示测试用例的数量 ($1 \le t \le 10^4$)。接下来是各测试用例。
每个测试用例的第一行包含两个整数 $n$ 和 $q$ ($1 \le n, q \le 10^5$),分别表示树的顶点数和查询数。
接下来的 $n - 1$ 行,每行包含两个整数 $u_i$ 和 $v_i$,表示树的第 $i$ 条边连接的顶点编号 ($1 \le u_i, v_i \le n$)。
随后的 $q$ 行包含题目描述格式的查询。
所有测试用例的 $n$ 之和不超过 $10^5$。所有测试用例的 $q$ 之和不超过 $10^5$。
输出格式
对于每个第三类查询,输出一行答案。
样例
输入 1
1 8 7 1 2 1 3 3 4 2 5 4 6 1 7 6 8 3 1 1 7 8 3 1 2 7 8 1 8 6 1 7 7 3 3
输出 1
0 7 3