message: update solution
  Given default method signature seems changed.
diff: # Time: O(n * d), n is length of string, d is size of dictionary
  # Space: O(d)
  -class Solution(object):
  - # @param start, a string
  - # @param end, a string
  - # @param dict, a set of string
  - # @return an integer
  - def findLadders(self, start, end, dict):
  - dict.add(start)
  - dict.add(end)
  +from collections import defaultdict
  +from string import ascii_lowercase
  +
  - result, cur, visited, found, trace = [], [start], set([start]), False, {word: [] for word in dict}
  +class Solution(object):
  + def findLadders(self, beginWord, endWord, wordList):
  + """
  + :type beginWord: str
  + :type endWord: str
  + :type wordList: List[str]
  + :rtype: List[List[str]]
  + """
  + dictionary = set(wordList)
  + result, cur, visited, found, trace = [], [beginWord], set([beginWord]), False, defaultdict(list)
  while cur and not found:
  for word in cur:
  @@ -19,17 +23,17 @@ class Solution(object):
  next = set()
  for word in cur:
  for i in xrange(len(word)):
  - for j in 'abcdefghijklmnopqrstuvwxyz':
  - candidate = word[:i] + j + word[i + 1:]
  - if candidate not in visited and candidate in dict:
  - if candidate == end:
  + for c in ascii_lowercase:
  + candidate = word[:i] + c + word[i + 1:]
  + if candidate not in visited and candidate in dictionary:
  + if candidate == endWord:
  found = True
  next.add(candidate)
  trace[candidate].append(word)
  cur = next
  if found:
  - self.backtrack(result, trace, [], end)
  + self.backtrack(result, trace, [], endWord)
  return result
  