The Word Game Assignment

Your mission is to find a way to transform a given word (say "yard") to another word (say "fish") via single letter substitutions such that every intermediate word is actualy a word (for example "fish<-wish<-wash<-wasp<-warp<-ward<-yard").

Your program will be given a list of word pairs.  Each word in the pair differs from the other by only one substitution.  You shall construct a graph connecting such that each word is a node, and each pair of words is linked by an edge.  Finally, you will be given a pair to search.  You shall find the hopefully shortest path though the constructed graph from the first to the second word.

Each word is always four letters long except for the huge input.  The largest input is less than 8,000 edges except for the huge input.

Sample Input
(Lots more edges)
Edge axed axer
Edge axed axes
Edge axer axes
Edge axes axis
Edge axes ayes
Edge ayes dyes
Edge ayes eyes
Check ayes axis
Check axed dyes
Check able eyes

Sample Output
Checking ayes axis:axis<-axes<-ayes
Checking axed dyes:dyes<-ayes<-axes<-axed
Checking able eyes:No path

Points
Task
10
Can make the graph
5
Can find a path between two words.
5
Can find one of the shortest paths between two words.
5
Can do this in less than 10M of RAM allocated.
5
Can do this in less than 10 seconds on the 'large' input.
5
Can do this in less than 20 seconds for the 'huge' input.
+2
Turned in before Thur March 11.
-1
Per day after Frid March 12.