#Lutece3367. 三维模型

三维模型

Description

四汪是一名游戏开发者,他在处理三维模型时遇到了一些问题,于是来找作为算法大佬的你求助。

在游戏引擎中,三维模型通常是由三角形组成的,这种表示方法被称为三角形网格(triangle mesh)。三角形网格之所以被广泛使用,是因为它具有简单性、稳定性、易于渲染、易于建模、易于处理等特点。三角形网格通常通过顶点数据和索引数据两部分来存储,其中顶点数据包含了构成三维模型的所有顶点的信息,包括顶点的索引值以及空间坐标;而索引数据用于描述三角形,每个三角形由三个整数表示其三个顶点在顶点数据中的索引。例如,对于下图中的三维模型,其顶点数据和索引数据分别如下。

顶点数据:

索引 坐标
1001 (2.5,0.74,0.5)(2.5,0.74,0.5)
1002 (2.88,2.76,0.0)(2.88,2.76,0.0)
1003 (4.55,1.6,0.0)(4.55,1.6,0.0)
1004 (2.6,4.1,1.5)(2.6,4.1,1.5)

索引数据:

  • [1001,1002,1003]\texttt{[1001,1002,1003]}
  • [1001,1002,1004]\texttt{[1001,1002,1004]}
  • [1001,1003,1004]\texttt{[1001,1003,1004]}
  • [1002,1003,1004]\texttt{[1002,1003,1004]}

我们认为两个三角形是相连的,当且仅当这两个三角形有一条公共边,即这两个三角形的索引数据中有两个点是相同的。只有当两个三角形相连时,我们认为这两个三角形属于同一个三维模型。如果不满足上述条件,即使这两个三角形在空间中是相交的,我们也不认为他们属于同一个三维模型。注意,同一条边可以被不止两个三角形共用,并且三维模型不一定必须是一个闭合的多面体。

从上述定义中不难看出,判断两个三角形是否属于同一个三维模型只与其索引数据有关,与其顶点数据并没有关系。现给出 nn 个三角形的索引数据,请求出一共有多少个不同的三维模型,并给出每个模型包含的三角形个数。

Input

第一行一个整数 TT (1T1051 \le T \le 10^5),表示测试数据组数。

每组测试数据第一行一个整数 nn (1n1051 \le n \le 10^5),表示三角形的个数。

接下来 nn 行,每行三个空格隔开的不同的整数,表示三角形三个顶点的索引值,每个数在 [0,109][0,10^9] 的范围内。数据保证不会出现完全相同的三角形。

所有测试数据的 nn 总和 n105\sum n\le 10^5

Output

对于每组测试数据,第一行输出一共有多少个不同的三维模型,第二行按从小到大的顺序输出每个模型包含的三角形个数。

Samples

1
7
1001 1002 1003
1001 1002 1004
1001 1003 1004
1002 1003 1004
1006 1005 1001
1006 1005 1002
1006 1005 1003
2
3 4

Resources

The 21st UESTC Programming Contest Preliminary