docs: def solve(graph, debug=False, anim=None):
      # TODO: check docstring
      """ Do MV routing for given nodes in `graph`.
      
      Translate data from node objects to appropriate format before.
  
      Args
      ----
      graph: :networkx:`NetworkX Graph Obj< >`
          NetworkX graph object with nodes
      debug: bool, defaults to False
          If True, information is printed while routing
      anim: AnimationDing0
          AnimationDing0 object
  
      Returns
      -------
      :networkx:`NetworkX Graph Obj< >`
          NetworkX graph object with nodes and edges
          
      See Also
      --------
      ding0.tools.animation.AnimationDing0 : for a more detailed description on anim parameter.
      """
  
      # TODO: Implement debug mode (pass to solver) to get more information while routing (print routes, draw network, ..)
  
      # translate DING0 graph to routing specs
      specs = ding0_graph_to_routing_specs(graph)
  
      # create routing graph using specs
      RoutingGraph = Graph(specs)
  
      timeout = 30000
  
      # create solver objects
      savings_solver = savings.ClarkeWrightSolver()
      local_search_solver = local_search.LocalSearchSolver()
  
      start = time.time()
  
      # create initial solution using Clarke and Wright Savings methods
      savings_solution = savings_solver.solve(RoutingGraph, timeout, debug, anim)
  
      # OLD, MAY BE USED LATER - Guido, please don't declare a variable later=now() :) :
      #if not savings_solution.is_complete():
      #    print('=== Solution is not a complete solution! ===')
  
      if debug:
          logger.debug('ClarkeWrightSolver solution:')
          util.print_solution(savings_solution)
          logger.debug('Elapsed time (seconds): {}'.format(time.time() - start))
          #savings_solution.draw_network()
  
      # improve initial solution using local search
      local_search_solution = local_search_solver.solve(RoutingGraph, savings_solution, timeout, debug, anim)
      # this line is for debug plotting purposes:
      #local_search_solution = savings_solution
  
      if debug:
          logger.debug('Local Search solution:')
          util.print_solution(local_search_solution)
          logger.debug('Elapsed time (seconds): {}'.format(time.time() - start))
          #local_search_solution.draw_network()
  
      return routing_solution_to_ding0_graph(graph, local_search_solution)