input: Write a python function to perform Depth-First Search (DFS) on a graph represented as an adjacency list.
  assert DFS({'A': set(['B', 'C']), 'B': set(['A', 'D', 'E']), 'C': set(['A', 'F']), 'D': set(['B']), 'E': set(['B', 'F']), 'F': set(['C', 'E'])}, 'A') == {'E', 'D', 'F', 'A', 'C', 'B'}
  assert DFS({'1': set(['2', '3']), '2': set(['1', '4', '5']), '3': set(['1']), '4': set(['2']), '5': set(['2'])}, '1') == {'4', '5', '1', '3', '2'}
  assert DFS({'X': set(['Y']), 'Y': set(['X', 'Z']), 'Z': set(['Y'])}, 'X') == {'Z', 'Y', 'X'}
output: def DFS(graph, start):
      visited = set()
      stack = [start]
  
      while stack:
          vertex = stack.pop()
          if vertex not in visited:
              visited.add(vertex)
              stack.extend(graph[vertex] - visited)
      
      return visited