input: 
  def create_double_linked_list() -> DoubleLinkedList:
      """ Create and return a double linked list that can traverse in both directions.
      The linked list should support appending elements at the end and prepending elements 
      at the beginning. It should also support reversing the order of the list.
      
      >>> lst = create_double_linked_list()
      >>> lst.append(1)
      >>> lst.append(2)
      >>> lst.append(3)
      >>> # List should be 1 <-> 2 <-> 3
      >>> lst.prepend(0)
      >>> # List should be 0 <-> 1 <-> 2 <-> 3
      >>> lst.reverse()
      >>> # List should be 3 <-> 2 <-> 1 <-> 0
      """
  
output:     
      class Node:
          def __init__(self, value):
              self.value = value
              self.next = None
              self.prev = None
  
      class DoubleLinkedList:
          def __init__(self):
              self.head = None
              self.tail = None
  
          def append(self, value):
              new_node = Node(value)
              if self.tail is None:
                  self.head = self.tail = new_node
              else:
                  new_node.prev = self.tail
                  self.tail.next = new_node
                  self.tail = new_node
  
          def prepend(self, value):
              new_node = Node(value)
              if self.head is None:
                  self.head = self.tail = new_node
              else:
                  new_node.next = self.head
                  self.head.prev = new_node
                  self.head = new_node
  
          def reverse(self):
              current = self.head
              while current:
                  current.next, current.prev = current.prev, current.next
                  current = current.prev
              self.head, self.tail = self.tail, self.head
  
      return DoubleLinkedList()
  