第一行包含两个正整数 n,mn,mn,m,表示共有 nnn 棵树和 mmm 个操作。
接下来 mmm 行,每行包含若干非负整数表示一个操作,操作格式为:
0 l r表示将第 lll 棵树到第 rrr 棵树的生长节点下面长出一个子节点,子节点的标号为上一个 000 号操作叶子标号加 111(例如,第一个 000 号操作产生的子节点标号为 222), lll 到 rrr 之间的树长出的节点标号都相同。保证 1≤l≤r≤n1 \leq l \leq r \leq n1≤l≤r≤n 。
1 l r x表示将第 lll 棵树到第 rrr 棵树的生长节点改到标号为 xxx 的节点。对于 iii (l≤i≤r)(l \leq i \leq r)(l≤i≤r) 这棵树,如果标号 xxx 的点不在其中,那么这个操作对该树不产生影响。保证 1≤l≤r≤n1 \leq l \leq r \leq n1≤l≤r≤n , xxx 不超过当前所有树中节点最大的标号。
2 x u v询问第 xxx 棵树中节点 uuu 到节点 vvv 点的距离,也就是在第 xxx 棵树中从节点 uuu 和节点 vvv 的最短路上边的数量。保证 1≤x≤n1 \leq x \leq n1≤x≤n,这棵树中节点 uuu 和节点 vvv 存在。
输出包括若干行,按顺序对于每个小 Y 的询问输出答案
5 5 0 1 5 1 2 4 2 0 1 4 2 1 1 3 2 2 1 3
1 2
N≤105, M≤2×105N \leq 10^5, \ M \leq 2 \times 10^5N≤105, M≤2×105