print('BFS:\n%s'%copy.traverseBFS('s'))
    print('\nDFS:%s\n'%copy.traverseDFS())
    
    print('\nAfter Delete Vertex r:')
    undirected.removeVertex('r')
    print(undirected)
    print('BFS:\n%s'%undirected.traverseBFS('s'))
    print('\nDFS:%s\n'%undirected.traverseDFS())    
    
    print('\nAfter Delete Edge x->u:')
    undirected.removeEdge('x','u')
    print(undirected)
    print('BFS:\n%s'%undirected.traverseBFS('s'))
    print('\nDFS:%s\n'%undirected.traverseDFS())
    
    print('Shortest Path v->y: %s'%undirected.shortestPath('v','y'))
    print('Shortest Path s->y: %s'%undirected.shortestPath('s','y'))
    undirected.removeEdge('x','y')
    
    print('Shortest Path s->y after delete edge x->y: %s'%undirected.shortestPath('s','y'))
    
    print('Graph is a DAG: %s'%undirected.isDAG())
    
    print('\nUnchanged Copy:\n%s'%copy)
    copy.removeVertex('w')
    print('Removing vertex w:\n%s'%copy)
    print('BFS:\n%s'%copy.traverseBFS('s'))
    print('\nDFS:%s\n'%copy.traverseDFS())    
    
    print('\nOriginal Graph:\n%s'%undirected)
    print('Copy Graph after removing vertex "v"')
    copy.removeVertex('v')
    print(copy)
    print('DFS:%s\n'%copy.traverseDFS())
    
    print('Compared to original graph:')
    print(dag)
    
    print('After Delete Vertex r:')
    dag.removeVertex('r')
    
    print(dag)
    print('BFS:\n%s'%dag.traverseBFS('s'))
    print('\nDFS:%s\n'%dag.traverseDFS())
    
    print('\nAfter Delete Edge x->u:')
    dag.removeEdge('x','u')
    
    print(dag)
    print('BFS:\n%s'%dag.traverseBFS('s'))
    print('\nDFS:%s\n'%dag.traverseDFS())
    
    print('Shortest Path v->y: %s'%dag.shortestPath('v','y'))
    print('Shortest Path s->y: %s'%dag.shortestPath('s','y'))
    dag.removeEdge('x','y')
    print('Shortest Path s-> y after delete edge x->y: %s'%dag.shortestPath('s','y'))
    
    print('\nGraph is a DAG: %s'%dag.isDAG())
    
    print('\nCopy:\n%s'%copy)