A **transformation sequence** from word `beginWord`

to word `endWord`

using a dictionary `wordList`

is a sequence of words `beginWord -> s`

such that:_{1} -> s_{2} -> ... -> s_{k}

- Every adjacent pair of words differs by a single letter.
- Every
`s`

for_{i}`1 <= i <= k`

is in`wordList`

. Note that`beginWord`

does not need to be in`wordList`

. `s`

_{k}== endWord

Given two words, `beginWord`

and `endWord`

, and a dictionary `wordList`

, return *the number of words in the shortest transformation sequence from*

`beginWord`

*to*

`endWord`

*, or*

`0`

*if no such sequence exists.*

**Example 1:**

Input:beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"]Output:5Explanation:One shortest transformation sequence is "hit" -> "hot" -> "dot" -> "dog" -> cog", which is 5 words long.

## Solution

- C# solution is commented and explained
- Python solution is similar to the c# solution (not explained)

Graph problem + BFS to find the shortest path