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". Examples:
Input: joke, corn | tan, disc, need, eat
Output: joke, eat, tan, need, disc, corn
Note that delimiters between list items (in both input and output) are completely up to you, but they must be only one character long; I'm using commas and pipes with spaces for clarity.
Input: best, fry | easy, elf, mean, tame, yam, nice
Output: best, tame, elf, fry
NOT: 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; anything separated by your chosen delimiter will count.
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.