SP15849 DIGOKEYS - Find the Treasure

题目描述

一个喜欢玩锁和钥匙游戏并且逻辑很好的通灵者 Digo 有一天买了一套包含 $N$ 个盒子的装置,每个盒子都有一个从 $1$ 到 $N$(包括 $1$ 和 $N$)之间的唯一编号。除了第 $N$ 个盒子装有宝藏外,其他每个盒子里都有一把钥匙。由于制造缺陷,大多数钥匙可以打开多个盒子。 规则是每把钥匙只能用来打开一个盒子。除了第一个盒子外,所有盒子都是上锁的。Digo 急于得到宝藏,请求你找到一种方法,从第一个盒子里的钥匙开始,以最少的步骤打开最后一个盒子。

输入格式

第一行是一个整数 $T$,表示测试用例的数量。 对于每一个测试用例: - 第一行是一个整数 $N$,表示盒子的数量。 - 接下来的 $N-1$ 行,第 $i$ 行有一个整数 $M_i$,表示第 $i$ 个盒子里的钥匙可以打开的盒子数量,随后是 $M_i$ 个整数,表示这些盒子的编号。

输出格式

对于每一个测试用例: - 第一行是一个整数 $q$,表示打开盒子的最小数量。 - 第二行是按顺序打开的盒子编号,用空格隔开。如果有多种解法,输出字典序最小的一种。 - 如果无法到达最后一个盒子,输出 `-1`。 每个测试用例之间应有一个空行。

说明/提示

- $1 \le T \le 10$ - $2 \le N \le 100000$ - $1 \le M_i \le 10$ **样例输入** ``` 2 3 1 2 1 3 4 2 2 3 1 1 2 2 4 ``` **样例输出** ``` 2 1 2 2 1 3 ```