Word
题号:NC236980
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

给你一个包含 n 个单词的单词表。你需要将单词 s 以如下操作转换成 t
每次改变 s 的一个字母。你需要保证改变后的 或在单词表中出现过。
询问最小操作次数并输出方案。如果不能将 s 变成 t,输出 -1。

输入描述:

第一行两个正整数 ,表示单词表共 n 个单词,每个单词的长度都为 m
接下来第 行每行一个长度为 m 的字符串,表示单词表中的第 i 个单词。
最后一行两个长度为 m 的字符串 ,含义如题目描述。

输出描述:

第一行一个整数,表示最小操作次数。
假设你输出的最小操作次数为 st,操作方案输出方案如下:
方案共包含 行,每行输出一个字符串表示每步转换后的字符串 s。你需要保证第一行的字符串是 s 且最后一行的字符串是 t
注意把某个字符串变成最终答案 t 的操作不计入 st
示例1

输入

复制
5 3
qwq
awa
qwa
pwq
abc
qaq aww

输出

复制
3
qaq
qwq
qwa
awa
aww
示例2

输入

复制
2 2
qw
wq
bb bb

输出

复制
0
bb
bb
示例3

输入

复制
3 2
bf
ab
fg
aa cd

输出

复制
-1

备注:

对于  的数据,