def topologicalSortUtil(self, v, visited, stack):
    visited[v] = True
    for k in self.graph[v]:
        if (visited[k] == False):
            self.topologicalSortUtil(k, visited, stack)
    '\n        ### NOTE !! stack.append(v) is wrong, we SHOULD use  stack.insert(0,v)\n        '
    stack.insert(0, v)
def topologicalSortUtil(self, v, visited, stack):
    visited[v] = True
    for k in self.graph[v]:
        if (visited[k] == False):
            self.topologicalSortUtil(k, visited, stack)
    '\n        ### NOTE !! stack.append(v) is wrong, we SHOULD use  stack.insert(0,v)\n        '
    stack.insert(0, v)