AT_arc011_3 [ARC011C] ダブレット
题目描述
你正在玩一个单词接龙游戏。
一个单词可以变换为另一个单词,当且仅当这两个单词恰有一个字母不同。
给定起始单词 $first$ 和目标单词 $last$,以及一个含有 $N$ 个单词的 **可重** 词集 $\{s_0,s_1,...,s_{N-1}\}$。请回答,在只使用词集中的词进行变换的情况下,从 $first$ 变换到 $last$ 最少需要多少步 **(所使用的词集中的词的个数)**,并给出一组方案。
特别地:
- 若 $first$ 和 $last$ 相同,则步数为 $0$;
- 若无法完成变换,仅输出一行 `-1` 即可;
- **若 $first$ 只经过一次变换即可得到 $last$,则步数也为 $0$。(这段话原题没写)**
输入格式
第一行输入两个单词 $first$ 和 $last$。
第二行输入一个正整数 $N$,表示词集大小。
第三行到第 $(N+2)$ 行,每行输入一个单词 $s_i$ 表示词集中的一个词。
输出格式
若无法完成变换,仅输出一行一个整数 `-1`。
否则,按如下格式输出:
- 第一行输出一个整数 $k$,表示中间词的个数;
- 接下来 $(k+2)$ 行,每行一个单词。这 $(k+2)$ 行展示的即为从 $first$ 变换至 $last$ 的一种可能的过程。
若有多解,输出任一解即可。
**输出末尾换行。**
### 输入输出样例
#### 输入 #1
```
eye lid
4
lie
die
did
dye
```
#### 输出 #1
```
3
eye
dye
die
lie
lid
```
#### 输入 #2
```
eye eye
4
lie
die
did
dye
```
#### 输出 #2
```
0
eye
eye
```
#### 输入 #3
```
eye lid
4
lie
lip
did
dye
```
#### 输出 #3
```
-1
```
说明/提示
- $1\le N\le 1\ 000$;
- 词集中可能含有重复的单词,也可能含有 $first$ 和 $last$;
- 输入的每个单词长度都相同,且该长度 $L$ 满足 $1\le L\le 30$;
- 每个单词仅由英文小写字母 `a-z` 构成。