- #include <stdlib.h> 
- #include <stdio.h> 
-   
- typedef struct Item 
- { 
-    int height; 
-    struct Item* prev; 
-    struct Item* next; 
- } Item; 
-   
- typedef struct 
- { 
-    int size; 
-    Item* first; 
-    Item* last; 
- } List; 
-   
- static void insert(List *list, int height) 
- { 
-   
-    Item  *- newItem  = (- Item *)malloc(sizeof(- Item ));
-    newItem->height = height; 
-   
-    if (list->size == 0) 
-    { 
-       printf("* inserindo elemento %d em lista vazia\n",-  height );
 
-       // lista vazia 
-       list->first = newItem; 
-       list->last = newItem; 
-       newItem->prev = newItem; 
-       newItem->next = newItem; 
-       list->size = 1; 
-       return; 
-    } 
-   
-    if (height > list->first->height) 
-    { 
-       printf("* inserindo elemento %d antes do primeiro\n",-  height );
 
-       list->first->prev = newItem; 
-       list->last->next = newItem; 
-       newItem->prev = list->last; 
-       newItem->next = list->first; 
-       list->first = newItem; 
-       list->size++; 
-       return; 
-    } 
-   
-    if (height < list->last->height) 
-    { 
-       printf("* inserindo elemento %d depois do ultimo\n",-  height );
 
-       list->last->next = newItem; 
-       list->first->prev = newItem; 
-       newItem->prev = list->last; 
-       newItem->next = list->first; 
-       list->last = newItem; 
-       list->size++; 
-       return; 
-    } 
-   
-    printf("* inserindo elemento %d intermediario\n",-  height );
 
-    Item* item = list->first; 
-    for (int i = 0; i < list->size; i++) 
-    { 
-       if (item->height < height) 
-          break; 
-       item = item->next; 
-    } 
-   
-    item->prev->next = newItem; 
-   
-    newItem->prev = item->prev; 
-    newItem->next = item; 
-   
-    item->prev = newItem; 
-   
-    list->size++; 
- } 
-   
- static void print(List* list) 
- { 
-    printf("* tamanho da lista: %d\n",-  list ->- size );
 
-    Item* item = list->first; 
-    for (int i = 0; i < list->size; i++) 
-    { 
-       printf("* list[%d] = %d\n",-  i ,-  item ->- height );
 
-       item = item->next; 
-    } 
- } 
-   
-   
- int main(void) 
- { 
-    List list = { 0 }; 
-    print(&list); 
-   
-    insert(&list, 7);  // primeiro elemento 
-    print(&list); 
-   
-    insert(&list, 2); // antes do primeiro elemento 
-    print(&list); 
-   
-    insert(&list, 13); // depois do ultimo elemento 
-    print(&list); 
-   
-    insert(&list, 9);  // elemento intermediario 
-    print(&list); 
- } 
-   
				I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnR5cGVkZWYgc3RydWN0IEl0ZW0KewogICBpbnQgaGVpZ2h0OwogICBzdHJ1Y3QgSXRlbSogcHJldjsKICAgc3RydWN0IEl0ZW0qIG5leHQ7Cn0gSXRlbTsKCnR5cGVkZWYgc3RydWN0CnsKICAgaW50IHNpemU7CiAgIEl0ZW0qIGZpcnN0OwogICBJdGVtKiBsYXN0Owp9IExpc3Q7CgpzdGF0aWMgdm9pZCBpbnNlcnQoTGlzdCAqbGlzdCwgaW50IGhlaWdodCkKewogICBwcmludGYoIiogPT09XG4iKTsKCiAgIEl0ZW0gKm5ld0l0ZW0gPSAoSXRlbSopbWFsbG9jKHNpemVvZihJdGVtKSk7CiAgIG5ld0l0ZW0tPmhlaWdodCA9IGhlaWdodDsKCiAgIGlmIChsaXN0LT5zaXplID09IDApCiAgIHsKICAgICAgcHJpbnRmKCIqIGluc2VyaW5kbyBlbGVtZW50byAlZCBlbSBsaXN0YSB2YXppYVxuIiwgaGVpZ2h0KTsKICAgICAgLy8gbGlzdGEgdmF6aWEKICAgICAgbGlzdC0+Zmlyc3QgPSBuZXdJdGVtOwogICAgICBsaXN0LT5sYXN0ID0gbmV3SXRlbTsKICAgICAgbmV3SXRlbS0+cHJldiA9IG5ld0l0ZW07CiAgICAgIG5ld0l0ZW0tPm5leHQgPSBuZXdJdGVtOwogICAgICBsaXN0LT5zaXplID0gMTsKICAgICAgcmV0dXJuOwogICB9CgogICBpZiAoaGVpZ2h0ID4gbGlzdC0+Zmlyc3QtPmhlaWdodCkKICAgewogICAgICBwcmludGYoIiogaW5zZXJpbmRvIGVsZW1lbnRvICVkIGFudGVzIGRvIHByaW1laXJvXG4iLCBoZWlnaHQpOwogICAgICBsaXN0LT5maXJzdC0+cHJldiA9IG5ld0l0ZW07CiAgICAgIGxpc3QtPmxhc3QtPm5leHQgPSBuZXdJdGVtOwogICAgICBuZXdJdGVtLT5wcmV2ID0gbGlzdC0+bGFzdDsKICAgICAgbmV3SXRlbS0+bmV4dCA9IGxpc3QtPmZpcnN0OwogICAgICBsaXN0LT5maXJzdCA9IG5ld0l0ZW07CiAgICAgIGxpc3QtPnNpemUrKzsKICAgICAgcmV0dXJuOwogICB9CgogICBpZiAoaGVpZ2h0IDwgbGlzdC0+bGFzdC0+aGVpZ2h0KQogICB7CiAgICAgIHByaW50ZigiKiBpbnNlcmluZG8gZWxlbWVudG8gJWQgZGVwb2lzIGRvIHVsdGltb1xuIiwgaGVpZ2h0KTsKICAgICAgbGlzdC0+bGFzdC0+bmV4dCA9IG5ld0l0ZW07CiAgICAgIGxpc3QtPmZpcnN0LT5wcmV2ID0gbmV3SXRlbTsKICAgICAgbmV3SXRlbS0+cHJldiA9IGxpc3QtPmxhc3Q7CiAgICAgIG5ld0l0ZW0tPm5leHQgPSBsaXN0LT5maXJzdDsKICAgICAgbGlzdC0+bGFzdCA9IG5ld0l0ZW07CiAgICAgIGxpc3QtPnNpemUrKzsKICAgICAgcmV0dXJuOwogICB9CgogICBwcmludGYoIiogaW5zZXJpbmRvIGVsZW1lbnRvICVkIGludGVybWVkaWFyaW9cbiIsIGhlaWdodCk7CiAgIEl0ZW0qIGl0ZW0gPSBsaXN0LT5maXJzdDsKICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LT5zaXplOyBpKyspCiAgIHsKICAgICAgaWYgKGl0ZW0tPmhlaWdodCA8IGhlaWdodCkKICAgICAgICAgYnJlYWs7CiAgICAgIGl0ZW0gPSBpdGVtLT5uZXh0OwogICB9CgogICBpdGVtLT5wcmV2LT5uZXh0ID0gbmV3SXRlbTsKCiAgIG5ld0l0ZW0tPnByZXYgPSBpdGVtLT5wcmV2OwogICBuZXdJdGVtLT5uZXh0ID0gaXRlbTsKCiAgIGl0ZW0tPnByZXYgPSBuZXdJdGVtOwoKICAgbGlzdC0+c2l6ZSsrOwp9CgpzdGF0aWMgdm9pZCBwcmludChMaXN0KiBsaXN0KQp7CiAgIHByaW50ZigiKiAtLS1cbiIpOwogICBwcmludGYoIiogdGFtYW5obyBkYSBsaXN0YTogJWRcbiIsIGxpc3QtPnNpemUpOwogICBJdGVtKiBpdGVtID0gbGlzdC0+Zmlyc3Q7CiAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZTsgaSsrKQogICB7CiAgICAgIHByaW50ZigiKiBsaXN0WyVkXSA9ICVkXG4iLCBpLCBpdGVtLT5oZWlnaHQpOwogICAgICBpdGVtID0gaXRlbS0+bmV4dDsKICAgfQp9CgoKaW50IG1haW4odm9pZCkKewogICBMaXN0IGxpc3QgPSB7IDAgfTsKICAgcHJpbnQoJmxpc3QpOwoKICAgaW5zZXJ0KCZsaXN0LCA3KTsgIC8vIHByaW1laXJvIGVsZW1lbnRvCiAgIHByaW50KCZsaXN0KTsKCiAgIGluc2VydCgmbGlzdCwgMik7IC8vIGFudGVzIGRvIHByaW1laXJvIGVsZW1lbnRvCiAgIHByaW50KCZsaXN0KTsKCiAgIGluc2VydCgmbGlzdCwgMTMpOyAvLyBkZXBvaXMgZG8gdWx0aW1vIGVsZW1lbnRvCiAgIHByaW50KCZsaXN0KTsKCiAgIGluc2VydCgmbGlzdCwgOSk7ICAvLyBlbGVtZW50byBpbnRlcm1lZGlhcmlvCiAgIHByaW50KCZsaXN0KTsKfQo=