Загрузка данных


class Node:
    def __init__(self, val):
        self.val = val
        self.next = None
        self.prev = None




class Double_Linked_List:
    def __init__(self, *lst):
        self.head = self.tail = None
        self.size = 0


        for node in lst:
            self.append(node)
      
      
    def __len__(self):
        return self.size


    def __str__(self):
        if not self.head:
            return "empty"
        cur = self.head
        res = ""
        while cur:
            if not cur.next:
                res +=f"{cur.val}"
                break
            res +=f"{cur.val}<>"
            cur = cur.next
        return res
                           


    
    def __get_item__(self, idx):
        return self._node_at(idx)


    def __getitem__(self, key):
        return self.__get_node(key).val


    def __setitem__(self, idx, value):
        self._node_at(idx).val = value


    def append(self, val):
        new_node = Node(val)
        self.size +=1
        if not self.head:
            self.head= self.tail = new_no
            new_node.prev =self.tail
            self.tail =new_node




    def __get_node(self, idx):
        if idx <0:
            idx += self.size
        if idx > self.size -1 or idx <0:
            raise IndexError('index out of range')

        if idx > self.size // 2:
            cur = self.tail
            cur_idx = self.size - 1
            while cur_idx != idx:
                cur = cur.prev
                cur_idx -= 1
            return cur
        else:
            cur = self.head
            cur_idx = 0
            while cur_idx != idx


        if idx > self.size // 2:
            cur = self.tail
            cur_idx = self.size -1
            while cur_idx !=idx:
                cur = cur.prev
                cur_idx -=1
            return cur
        else:
            cur = self.head
            cur_idx = 0
            while cur_idx !=idx:
                cur =cur.next
                cur_idx+=1
            return cur
       


    def insert(self, idx, val):
        pass
      
      


    def remove(self, val):
        pass
        


    def pop(self, idx=-1):
       pass
    
 


    def swap(self, idx1, idx2):
        pass
      
      
      


    def reverse(self):
        pass