diff --git a/a.out b/a.out
index 1fbd779e432f2e38888994a22274d7ae67d21dee..6a41da0680bb893e0b03025c0ca50fefd8f88a81 100644
Binary files a/a.out and b/a.out differ
diff --git a/t2.c b/t2.c
index 47928afe0e01f38cb1d2430916a4d01b8114c1af..4e98f5a8b71598e21899786f78088067deecb299 100644
--- a/t2.c
+++ b/t2.c
@@ -21,25 +21,24 @@ typedef struct DHT {
     int max_id;
 } DHT;
 
-void redistribute_keys(Node* new_node) {
-    Node* current = new_node;
+void redistribute_keys(Node *dht, Node* new_node) {
+    Node *start = dht;
     do {
-        Node* next_node = current->next;
-        // Transferir chaves que são menores ou iguais ao id do próximo nó
-        for (int i = 0; i < current->key_count; i++) {
-            if ((current->keys[i] > current->id && current->keys[i] <= next_node->id) ||
-                (current->id > next_node->id && (current->keys[i] > current->id || current->keys[i] <= next_node->id))) {
-                next_node->keys[next_node->key_count++] = current->keys[i];
-                // Remover a chave do nó atual
-                for (int j = i; j < current->key_count - 1; j++) {
-                    current->keys[j] = current->keys[j + 1];
-                }
-                current->key_count--;
-                i--; // Reavaliar a posição atual
+        Node* current = new_node;
+        printf("Start:%d Next:%d\n", start->id, current->id);
+        printf("Start->key_count:%d\n", start->key_count);
+        //O novo nodo deve ter as chaves EXISTENTES que são maiores que o antecessor e menores ou iguais a ele
+        for (int i = 0; i < start->key_count; i++) {
+            printf("Start->keys[%d]:%d\n", i, start->keys[i]);
+            if (start->keys[i] > start->id && start->keys[i] <= current->id) {
+                printf("SAIA CHAVE SAIAAAA");
+                current->keys[current->key_count++] = start->keys[i];
+                start->keys[i] = 0;
+                start->key_count--;
             }
         }
-        current = next_node;
-    } while (current != new_node);
+        start = start->next;
+    } while (start != new_node);
 }
 
 // Função para criar um novo nó
@@ -77,7 +76,7 @@ Node *insert_node(Node *head, int id, int max_id) {
         new_node->next = head;
         new_node->prev = last;
         head->prev = new_node;
-        redistribute_keys(new_node);
+        redistribute_keys(head, new_node);
         return new_node; // Novo nó se torna a nova cabeça
     }
 
@@ -91,8 +90,7 @@ Node *insert_node(Node *head, int id, int max_id) {
     new_node->next = current;
     new_node->prev = prev;
     current->prev = new_node;
-
-    redistribute_keys(new_node);
+    redistribute_keys(head, new_node);
 
     return head;
 }
@@ -270,16 +268,14 @@ void insert_key(Node* head, int node_id, int key) {
     while (current->id != node_id) {
         current = current->next;
     }
-    do{
-     if ((current->id < current->next->id && key > current->id && key <= current->next->id) ||
-            (current->id > current->next->id && (key > current->id || key <= current->next->id))) {
-            current->next->keys[current->next->key_count++] = key;
-            printf("Chave %d inserida no nó %d\n", key, current->id);
-            return;
-        }
-        current = current->next;
-    } while (current != head);
     
+    //A partir no nosso nó, procuramos o próximo nó que cabe a chave
+    while(current->id < key && current != head){
+        current = current->next;
+    }
+
+    current->keys[current->key_count++] = key;
+    printf("Chave %d inserida no nó %d\n", key, current->id);
 }
 
 void imprime_chaves(Node* head) {