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
```