Given two words and a list as input, your program must (in as few characters as possible, of course) find the shortest way to "chain" the first word to the last using the ones in the list. Two words are "chained" if their first and last letters are the same, e.g. "Food" and "Door".
Your program will take input as a string with words separated by spaces, and output a list (in whatever format is most convenient: string, array/list type, etc) of the completed chain.
Input: joke corn tan disc need eat
Output: joke eat tan need disc corn
The first two words in the input list are the first and last words in the chain, and the rest are the constituent words.
Input: best fry easy elf mean tame yam nice
Output: best tame elf fry
best tame easy yam mean nice elf fry
Input: rug gunned orange purple gains pore soup emo ending
Output: rug gunned
Input: %3gioxl? 6699-4 !f!!&+ ?4; ;78! +6
Output: %3gioxl? ?4; ;78! !f!!&+ +6 6699-4
The "words" don't have to be real words; for the purpose of the challenge, any ASCII character except the space will count as part of a word.
Input: mouth rich frame inspire item sold
Output when the first and last word are impossible to chain is undefined, so handle it however's shortest.