1class Solution:2def ladderLength(self, beginWord: str, endWord: str, wordList: List[str]) -> int:3e = defaultdict(list)4m = len(beginWord)5for word in wordList + [beginWord]:6for i in range(m):7w = word[:i] + "*" + word[i + 1 :]8e[w].append(word)9q = deque([beginWord])10used = set([beginWord])11d = 012while q:13d += 114for _ in range(len(q)):15word = q.popleft()16for i in range(m):17w = word[:i] + "*" + word[i + 1 :]18if w in e:19for v in e[w]:20if v == endWord:21return d + 122if v not in used:23q.append(v)24used.add(v)25e.pop(w)26return 0