public static void main(String args[]) {
        String[] wordList = {"hot","dot","dog","lot","log"};
        Set<String> wordSet = new HashSet<>();
        wordSet.addAll(Arrays.asList(wordList));
        WordLadder wl = new WordLadder();
        List<List<String>> result = wl.findLadders("hit", "cog", wordSet);
        System.out.print(result);
    }
Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transformation sequence(s) from beginWord to endWord, such that:
Only one letter can be changed at a time
Each intermediate word must exist in the word list

Solution -
Since we have to find all paths we need care about below extra stuff on top of regular BFS
1) Maintain parent of every word to recreate the path
2) Maintain 2 visited. First is for level and once the entire level is done then move it to visited.
3) Also since we are looking result from beginWord to endWord switch them initially and go from endWord towards beginWord.

https://leetcode.com/problems/word-ladder-ii/
src/com/interview/graph/WordLadder.java