private boolean topSortUtil(char vertex, Deque<Character> stack, Set<Character> visited, Set<Character> dfs, Map<Character, Set<Character>> graph) {
        if (visited.contains(vertex)) {
            return false;
        }
        visited.add(vertex);
        dfs.add(vertex);
        Set<Character> set = graph.get(vertex);
        if (set != null) {
            for (char neighbor : set) {
                if (dfs.contains(neighbor)) {
                    return true;
                }
                if (topSortUtil(neighbor, stack, visited, dfs, graph)) {
                    return true;
                }
            }
        }
        dfs.remove(vertex);
        stack.offerFirst(vertex);
        return false;
    }
There is a new alien language which uses the latin alphabet. However, the order among letters
are unknown to you. You receive a list of words from the dictionary, where words are sorted
lexicographically by the rules of this new language. Derive the order of letters in this language.

https://leetcode.com/problems/alien-dictionary/
src/com/interview/graph/AlientDictionary.java