农夫约翰有一块位于高速公路一侧的农场,他想在奶牛身上打上广告语给自己生产的奶制品作些宣传,这样当奶牛们排成一排吃草时,开车的人就能看到广告。于是约翰依次在C(2 ≤ C ≤ 20)头奶牛的身上刷上了K (2 ≤ K ≤ 4)个字母组成了一句广告语,广告语中是没有空格。
在第二天早上出奶之后,农夫约翰注意到他刷在奶牛身上的广告语显示出错了,原因是奶牛们排错了次序,更糟糕的是农夫约翰也忘了最初的广告语,因为约翰十分的健忘,好在约翰文化程度很低,他认识的单词并不多,他所用的广告语使用的单词都是他所认识的,约翰认识的单词不超过的D个(1≤D≤150),一个单词可以不止一次地用于广告语中。
现在给出所有奶牛身上的信息,以及约翰认识的所有单词,请你编一个程序,帮助农夫约翰重建最初的信息。
第一行为3个用空格隔开的整数,表示K,C,D。
第2到C+1行每行均为K个字母,表示一头奶牛身上的信息。
从C+2行到C+D+1行每行为一个约翰认识的单词,单词的长度不超过10。
第1行为在字典序列中最小的可能的句子。第2行一个整数,表示有多少句可能的句子。如果不存在符合要求的句子,输出"NOSOLUTIONS"。
3 5 7
TEN
ATT
NAT
BAR
ACK
AT
ATTACK
BARN
CHICKENS
CHOPPERS
COWS
TEN
1 1
2 4
3 1
2 2
2 1
ATTACK BARN AT TEN
6
TEN ATTACK BARN AT
TEN BARN AT ATTACK
ATTACK TEN BARN AT
ATTACK BARN AT TEN
BARN AT TEN ATTACK
BARN AT ATTACK TEN