def draw():
    [l, s, as1, e1, a13, a31, e3, a34, a43, e4, a4e, e] = create_doubly_linked_list([1, None, 3, 4])
    ca21 = Cross(a13, color=RED)
    ca12 = Cross(a31, color=RED)
    e2 = DoublyLinkedList((e3.x - 70, e3.y + 40), 2, color=RED)
    a12 = Arrow(e1.prox_3, e2.start_0, color=RED)
    a21 = Arrow(e2.ant_2, e1.d_3, color=RED)
    a23 = Arrow(e2.prox_2, e3.d_1, color=RED)
    a32 = Arrow(e3.ant_3, e2.u_4, color=RED)
    circ = Circle((e.x + 40, e.y), "2", color=BLUE)
    p1 = Pointer(e1, "p", direction="u.u_2", color=RED)
    p3 = Pointer(e3, "p", direction="u.u_2", color=RED)
    cp1 = Cross(p1.label, color=RED)
    return [l, s, as1, e1, a13, a31, e3, a34, a43, e4, a4e, e, circ, ca21, ca12, e2, a12, a21, a23, a32, p1, p3, cp1]
def remove():
    [
        l, s, as3, e3, a31, a13, e1, a12, a21, e2, a2e, e
    ] = create_doubly_linked_list([3, 1, 2], color=RED, y=220)
    ca31 = Cross(a31, color=BLUE)
    ca21 = Cross(a21, color=BLUE)
    desloc = lambda p, d: (p[0], p[1] + d)
    sa32 = SubArrow(desloc(e3.prox_1, - 3), desloc(e2.start_1, - 3), 
        size_y=-15, color=BLUE)
    sa23 = SubArrow(desloc(e2.ant_3, 3), desloc(e3.end_3, 3), 
        size_y=15, color=BLUE, reverse=True)
    c1 = Cross(e1.middle, color=BLUE, size=20)
    return [
        l, s, as3, e3, a31, a13, e1, a12, a21, e2, a2e, e,
        ca31, ca21, sa32, sa23, c1
    ]
def search():
    [
        l, s, as3, e3, a31, a13, e1, a12, a21, e2, a2e, e
    ] = create_doubly_linked_list([3, 1, 2])
    circ = Circle((e.x + 40, e.y), "1", color=BLUE)
    p = Pointer(e1, 'p = busca(l, 1)', direction='u.u_2', color=RED)
    label1 =  Label((e1.mx + 19, e1.my+25),
        "p->ant->prox = p->prox;", color=RED)
    label2 =  Label((e1.mx + 15, e1.my+40),
        "p->prox->ant = p->ant;", color=RED)
    ca31 = Circle(a31, "", color=RED, radius=10)
    ca21 = Circle(a21, "", color=RED, radius=10)
    return [
        l, s, as3, e3, a31, a13, e1, a12, a21, e2, a2e, e,
        p, circ, ca31, ca21, label1, label2
    ]
def draw():
    [
        l, s, as3, e3, a31, a13, e1, a12, a21, e2, a2e, e
    ] = create_doubly_linked_list([3, 1, 2])
    circ = Circle((e.x + 40, e.y), "3", color=BLUE)
    l1 = Pointer(e1, 'l', direction='ul.u_0', color=RED)
    cl = Cross(l.label, color=RED)
    ca13 = Cross(a13, color=RED)
    n = Null((a13.mx + 6, a13.my - 10), color=RED)
    desloc = lambda p, d: (p[0], p[1] + d)
    d = Line(desloc(e1.ant_3, 4), n.middle, color=RED)
    c3 = Cross(e3.middle, color=RED, size=20)
    return [
        l, s, as3, e3, a31, a13, e1, a12, a21, e2, a2e, e,
        circ, l1, cl, ca13, n, d, c3
    ]
def draw():
    [
        l, s, as3, e3, a31, a13, e1, a12, a21, e2, a2e, e
    ] = create_doubly_linked_list([3, 1, 2])
    circ = Circle((e.x + 40, e.y), "2", color=BLUE)
    ca12 = Cross(a12, color=RED)
    n = Null((a12.mx + 15, a12.my - 40), color=RED)
    desloc = lambda p, d: (p[0], p[1] + d)
    p = (a12.mx - 3, a12.my - 26)
    d1 = Line(p, n.middle, color=RED)
    d2 = Line(desloc(e1.prox_1, - 4), p, color=RED)
    c2 = Cross(e2.middle, color=RED, size=20)
    return [
        l, s, as3, e3, a31, a13, e1, a12, a21, e2, a2e, e,
        circ, ca12, n, d1, d2, c2
        
    ]
def three_elements():
	return create_doubly_linked_list([2, 1, 3], y=300)
def two_elements():
	return create_doubly_linked_list([2, 1], y=200)
def one_element():
	return create_doubly_linked_list([1], x=100)
def empty():
	return create_doubly_linked_list([])