diff --git a/tp4/lib_conjunto.c b/tp4/lib_conjunto.c
index 9bc64e231aeb3fafba4b1c451107676d1df605af..c5416dfffe5b3fa037088a4c6f387826630bf1b8 100644
--- a/tp4/lib_conjunto.c
+++ b/tp4/lib_conjunto.c
@@ -138,23 +138,30 @@ conjunto_t *uniao_cjt(conjunto_t *c1, conjunto_t *c2) {
 	conjunto_t **menor_cjt = cardinalidade_cjt(c1) < cardinalidade_cjt(c2) ? &c1 : &c2;
 	conjunto_t **maior_cjt = cardinalidade_cjt(c1) > cardinalidade_cjt(c2) ? &c1 : &c2;
 	
-	while (c1->ptr < cardinalidade_cjt(c1) && c2->ptr < cardinalidade_cjt(c2)) {
-		if (c1->v[c1->ptr] == c2->v[c2->ptr]) {
-			insere_cjt(uniao, c1->v[c1->ptr]);
-			c1->ptr++;
-			c2->ptr++;
-		} else {
-			if (c1->v[c1->ptr] < c2->v[c2->ptr]) {
-				insere_cjt(uniao, c1->v[c1->ptr]);
-				c1->ptr++;
-			} else {
-				insere_cjt(uniao, c2->v[c2->ptr]);
-				c2->ptr++;
-			}
-		}
-	}
+	/* while (c1->ptr < cardinalidade_cjt(c1) && c2->ptr < cardinalidade_cjt(c2)) { */
+	/* 	if (c1->v[c1->ptr] == c2->v[c2->ptr]) { */
+	/* 		insere_cjt(uniao, c1->v[c1->ptr]); */
+	/* 		c1->ptr++; */
+	/* 		c2->ptr++; */
+	/* 	} else { */
+	/* 		if (c1->v[c1->ptr] < c2->v[c2->ptr]) { */
+	/* 			insere_cjt(uniao, c1->v[c1->ptr]); */
+	/* 			c1->ptr++; */
+	/* 		} else { */
+	/* 			insere_cjt(uniao, c2->v[c2->ptr]); */
+	/* 			c2->ptr++; */
+	/* 		} */
+	/* 	} */
+	/* } */
+	
+	/* TODO: arrumar isso aqui de cima ^ e apagar isso aqui de baixo v */
 
 	int i;
+	for (i = 0; i < cardinalidade_cjt(*menor_cjt); i++) {
+		insere_cjt(uniao, c1->v[i]);
+		insere_cjt(uniao, c2->v[i]);
+	}
+	
 	for (i = cardinalidade_cjt(*menor_cjt); i < cardinalidade_cjt(*maior_cjt); i++) {
 		insere_cjt(uniao, (*maior_cjt)->v[i]);
 	}
diff --git a/tp4/tp4 b/tp4/tp4
index 3368d0f7bc516f8fba91116e43a75ad81f92b3a1..0487535f0ba3e7e14013526730e2a1787577a66d 100755
Binary files a/tp4/tp4 and b/tp4/tp4 differ
diff --git a/tp4/tp4.c b/tp4/tp4.c
index b4c89eec0ba719663aed05107abf46085439c8ce..9f4e3ec54f31e1416c2a7ce6719baa9283020406 100644
--- a/tp4/tp4.c
+++ b/tp4/tp4.c
@@ -23,7 +23,7 @@ conjunto_t **le_vetor_conjuntos(int *tam, int max) {
 	int n, m;
 	scanf("%d", &n);
 	while (n) {
-		if ( !(vetor_c[*tam] = cria_cjt(10)) )
+		if ( !(vetor_c[*tam] = cria_cjt(15)) )
 			return NULL;
 		insere_cjt(vetor_c[*tam], n);
 		scanf("%d", &m);
@@ -47,7 +47,7 @@ conjunto_t **libera_vetor_conjuntos(conjunto_t **vetor_c, int tam) {
 
 conjunto_t *acha_solucao(conjunto_t **herois, conjunto_t *missao, conjunto_t **equipes, int tam_equipes) {
 	conjunto_t *menor;
-	menor = cria_cjt(10);
+	menor = cria_cjt(15);
 	conjunto_t *uniao_old;
 	conjunto_t *uniao;
 	int i, j;
@@ -59,8 +59,8 @@ conjunto_t *acha_solucao(conjunto_t **herois, conjunto_t *missao, conjunto_t **e
 			uniao_old = uniao;
 			uniao = uniao_cjt(uniao, herois[equipes[i]->v[j] - 1]);
 			uniao_old = destroi_cjt(uniao_old);
-		}
 			/* realiza a uniao de todos os conjuntos de habilidades de heroi referenciados no conjunto equipe da posicao atual do vetor de equipes. */
+		}
 		if (contido_cjt(missao, uniao)) {
 			if (vazio_cjt(menor) || cardinalidade_cjt(equipes[i]) < cardinalidade_cjt(menor)) {
 				menor = destroi_cjt(menor);