DreamGrid 制作了一个图生成器。该生成器接收一个整数 $n$,并生成一个包含 $n$ 个顶点的无向图。
更具体地说,生成器首先生成一个空图 $G$ 和一个 $\{1, 2, \dots, n\}$ 的排列 $p$。之后,生成器会执行 $n$ 次操作,在第 $q$ 次操作中:
- 找到 $G$ 中所有的连通分量 $C_1, C_2, \dots, C_m$。
- 从 $\bigcup_{i=1}^m C_i$ 中选择一个子集 $S_q$,使得 $S_q$ 中的任意两个顶点都不属于同一个连通分量。
- 在 $G$ 中创建一个索引为 $p_q$ 的新顶点,并添加一条连接 $p_q$ 与 $\bigcup_{i \in S_q} C_{bel_i}$ 中每个顶点 $v$ 的边,其中 $bel_i$ 是 $i$ 所属的连通分量的索引。
给定最终生成的图,DreamGrid 想知道所有的 $p_q$ 和 $S_q$。
输入格式
输入包含多组测试数据。第一行包含一个整数 $T$,表示测试数据的组数。对于每组测试数据:
第一行包含两个整数 $n$ 和 $m$ ($1 \le n \le 10^5, 0 \le m \le \min(10^5, \frac{n(n-1)}{2})$),分别表示顶点数和边数。
接下来的 $m$ 行,每行包含两个整数 $u_i$ 和 $v_i$ ($1 \le u_i, v_i \le n$)。图中不存在自环或重边。
保证所有测试数据的 $n$ 之和以及 $m$ 之和均不超过 $2 \times 10^6$。
输出格式
对于每组测试数据,如果该图无法由生成器生成,则在第一行输出 “No”。
否则,在第一行输出 “Yes”。然后在接下来的 $n$ 行中,第 $i$ 行输出两个整数 $q_i$ 和 $s_i$ ($1 \le q_i \le n$),随后输出 $s_i$ 个整数 $a_1, a_2, \dots, a_{s_i}$ ($1 \le a_j \le n$),分别表示第 $i$ 次操作中新创建的顶点索引和子集。如果存在多种解,输出任意一种即可。
样例
输入 1
3 3 0 4 4 1 2 2 3 3 4 2 4 5 5 1 2 2 3 3 4 4 5 2 4
输出 1
Yes 1 0 2 0 3 0 Yes 1 0 4 0 3 1 4 2 2 1 3 No