#P9983. 纠缠点对

纠缠点对

纠缠点对

Problem Description

给定两棵由 nn 个顶点构成的无根树 T1T_1T2T_2。 定义点对 (u,v)(u,v)(x,y)(x,y) 相互纠缠,当且仅当,在 T1T_1 上和 T2T_2 上,从 uuvv 和从 xxyy 的最短路径都有至少一个交点。 现给定 mm 对点对 (x1,y1),(x2,y2),,(xm,ym)(x_1, y_1), (x_2, y_2), \ldots, (x_m, y_m),计算:有多少对点对相互纠缠。即,存在多少对 i<ji < j,使得点对 (xi,yi)(x_i, y_i) 和点对 (xj,yj)(x_j,y_j) 相互纠缠。

Input

第一行一个整数 tt (1t10)(1 \leq t \leq 10),表示测试数据的组数。 对于每组数据: 第一行两个整数 nn (1n105)(1 \leq n \leq 10^5)mm (1m105)(1 \leq m \leq 10^5)。 接下来 n1n-1 行,每行两个整数 uuvv,表示 T1T_1 上的一条边。 接下来 n1n-1 行,每行两个整数 uuvv,表示 T2T_2 上的一条边。 接下来 mm 行,每行两个整数 xxyy,表示给定的一个点对。

Output

对每组数据输出一行一个整数,表示所求答案。

Sample Input

2
5 3
1 2
2 3
3 4
4 5
1 2
1 3
2 4
2 5
1 5
2 3
4 5
4 2
2 1
3 2
4 3
2 1
3 1
4 3
1 4
1 1

Sample Output

2
1

Source

2024“钉耙编程”中国大学生算法设计超级联赛(7)