diff --git a/mydht b/mydht
new file mode 100644
index 0000000000000000000000000000000000000000..6821cb787da2a6a7379ef09fa6d087f00280e3cf
Binary files /dev/null and b/mydht differ
diff --git a/t2.c b/t2.c
index 89c079e0dc72eb346c44d9a2f85dcf205fd763c7..d51c59a98f2055c53b38c4cf0b3501174f6f6500 100644
--- a/t2.c
+++ b/t2.c
@@ -16,15 +16,28 @@ typedef struct Node {
     struct Node* prev;
 } Node;
 
+
+int atualiza_max_id(Node *dht){
+    Node *current = dht;
+    int max_id = 0;
+    do {
+        if(current->id > max_id){
+            max_id = current->id;
+        }
+        current = current->next;
+    } while (current != dht);
+    return max_id;
+}
+
 void redistribute_keys(Node *dht, Node* new_node) {
     Node *start = dht;
     do {
         Node* current = new_node;
-        // printf("Start:%d Next:%d\n", start->id, current->id);
-        // printf("Start->key_count:%d\n", start->key_count);
+        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]);
+            printf("Start->keys[%d]:%d\n", i, start->keys[i]);
             if (start->keys[i] > start->id && start->keys[i] <= current->id) {
                 current->keys[current->key_count++] = start->keys[i];
                 start->keys[i] = 0;
@@ -161,14 +174,14 @@ Node* remove_node(Node* head, int id) {
 // Função para calcular a tabela finger
 void calculate_finger_table(Node* head, int max_id) {
     Node* current = head;
-    // printf("Max_id:%d\n", max_id);
+    printf("Max_id:%d\n", max_id);
     int log2_max_id = ceil(log2(max_id));
-    // printf("Log2_max_id:%d\n", log2_max_id);
+    printf("Log2_max_id:%d\n", log2_max_id);
     do {
         for (int k = 1; k <= log2_max_id; k++) {
-            // printf("N:%d", current->id);
+            printf("N:%d", current->id);
             int finger_id = (current->id + (1 << (k-1))) % (1 << log2_max_id);
-            // printf(" Finger_id:%d\n", finger_id);
+            printf(" Finger_id:%d\n", finger_id);
             Node* temp = head;
             //Inserir na tabela_finger o id do nó que é o menor id maior que o id do finger_id, ou seja, o id mais próximo do finger_id
             while(temp->id < finger_id && temp->next != head) {
@@ -215,8 +228,8 @@ void print_finger_table_completa(Node* head, int timestamp) {
 
 
 // Função para realizar lookup de uma chave
-Node ** lookup(Node* head, int timestamp, int node_id, int key, int *num_nodes) {
-    // printf("Lookup\n");
+Node ** lookup(Node* head, int timestamp, int node_id, int key, int *num_nodes, int max_id) {
+    printf("Lookup\n");
     Node* current = head;
     Node** nodes_involved = (Node**)malloc(TAM_MAX_FINGER * sizeof(Node*));
     *num_nodes = 0;
@@ -240,6 +253,7 @@ Node ** lookup(Node* head, int timestamp, int node_id, int key, int *num_nodes)
             }
         }
         printf(",");
+
         //Procura o maior nó conhecido pela finger_table que está acima do valor da chave
         for (int i = 0; i < current->tam_finger; i++) {
             if (current->finger[i] > key) {
@@ -263,6 +277,12 @@ Node ** lookup(Node* head, int timestamp, int node_id, int key, int *num_nodes)
         while(current->id != id_aux){
             current = current->next;
         }
+
+        //Previne caso onde a chave nao esta no maior nodo 
+        if(current->id == max_id && key > current->id){   
+            current = head;
+        }
+        
         nodes_involved[(*num_nodes)++] = current; //Adiciona o nó atual ao array de nós envolvidos
 
         //Previne loops infinitos
@@ -290,7 +310,7 @@ void insert_key(Node* head, int node_id, int key) {
     }
 
     current->keys[current->key_count++] = key;
-    // printf("Chave %d inserida no nó %d\n", key, current->id);
+    printf("Chave %d inserida no nó %d\n", key, current->id);
 }
 
 void imprime_chaves(Node* head) {
@@ -322,11 +342,12 @@ int main() {
             calculate_finger_table(dht, max_id);
         } else if (op == 'S') {
             dht = remove_node(dht, id);
+            max_id = atualiza_max_id(dht);
         } else if (op == 'I') {
             insert_key(dht, id, key);
         } else if (op == 'L') {
             int num_nodes = 0;
-            nodes_involved = lookup(dht, timestamp, id, key, &num_nodes);
+            nodes_involved = lookup(dht, timestamp, id, key, &num_nodes, max_id);
             print_finger_table(nodes_involved, num_nodes, timestamp);
             free(nodes_involved);
         } else if (op == 'P'){
diff --git a/teste1.in b/teste1.in
index ce0be837c917b784e45b83340b99112ebf36de04..0d823836dc09173ce87013f7907d282f1c9ded2b 100644
--- a/teste1.in
+++ b/teste1.in
@@ -8,8 +8,9 @@
 8 L 10 18
 9 E 1 -
 10 E 56 -
-11 I 1 50
+11 I 1 58
 12 S 56 -
 13 E 52 -
 14 E 42 -
-15 L 10 50
\ No newline at end of file
+15 P 1 -
+16 L 28 58
\ No newline at end of file