diff --git a/t1/libconjunto.c b/t1/libconjunto.c
new file mode 100644
index 0000000000000000000000000000000000000000..ce75e6b16fb937bec185553fa10be3a6fe39c243
--- /dev/null
+++ b/t1/libconjunto.c
@@ -0,0 +1,233 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "libconjunto.h"
+
+/* retorna a posicao de um elemento em um conjunto ([0..card-1]).
+ * como estamos trabalhando com conjuntos ordenados, eh uma busca binaria.
+ * se o elemento nao esta no conjunto, retorna -1. */
+int busca_cjt(conjunto_t *c, int elemento) {
+	int inicio = 0;
+	int fim = cardinalidade_cjt(c) - 1;
+	int meio = fim / 2;
+
+	while (inicio <= fim && c->v[meio] != elemento) {
+		if (elemento > c->v[meio]) {
+			inicio = meio + 1;
+		} else {
+			fim = meio - 1;
+		}
+		meio = (inicio + fim) / 2;
+	}
+
+	return inicio > fim ? -1 : meio;
+}
+
+conjunto_t *cria_cjt(int max) {
+	conjunto_t *c;
+	if ( !(c = malloc(sizeof(conjunto_t))) )
+		return NULL;
+	c->max = max;
+	c->card = 0;
+	c->ptr = 0;
+	if ( !(c->v = malloc(sizeof(int) * max)) ) {
+		free(c);
+		return NULL;
+	}
+	return c;
+}
+
+conjunto_t *destroi_cjt(conjunto_t *c) {
+	free(c->v);
+	c->v = NULL;
+	free(c);
+	return NULL;
+}
+
+int vazio_cjt(conjunto_t *c) {
+	return cardinalidade_cjt(c) == 0;	
+}
+
+int cardinalidade_cjt(conjunto_t *c) {
+	return c->card;
+}
+
+int insere_cjt(conjunto_t *c, int elemento) {
+	if (cardinalidade_cjt(c) == c->max)
+		return 0;
+
+	if (pertence_cjt(c, elemento))
+		return 1;
+
+	int i = cardinalidade_cjt(c);
+	while (i > 0 && c->v[i - 1] > elemento) {
+		c->v[i] = c->v[i - 1];
+		i--;
+	}
+	
+	c->v[i] = elemento;
+	c->card++;
+	return 1;
+}
+
+int retira_cjt(conjunto_t *c, int elemento) {
+	if (!(pertence_cjt(c, elemento)))
+		return 0;
+
+	int i;
+	for(i = busca_cjt(c, elemento); i < cardinalidade_cjt(c)-1; i++) {
+		c->v[i] = c->v[i + 1];
+	}
+
+	c->card--;
+	return 1;
+}
+
+int pertence_cjt(conjunto_t *c, int elemento) {
+	return busca_cjt(c, elemento) != -1;
+}
+
+int contido_cjt(conjunto_t *c1, conjunto_t *c2) {
+	int i;
+	for (i = 0; i < cardinalidade_cjt(c1); i++) {
+		if (!(pertence_cjt(c2, c1->v[i])))
+			return 0;
+	}
+	return 1;
+}
+
+int sao_iguais_cjt(conjunto_t *c1, conjunto_t *c2) {
+	return cardinalidade_cjt(c1) == cardinalidade_cjt(c2) && contido_cjt(c1, c2);
+}
+
+conjunto_t *diferenca_cjt(conjunto_t *c1, conjunto_t *c2) {
+	conjunto_t *dif;
+	if ( !(dif = cria_cjt(c1->max)) )
+		return NULL;
+
+	int i;
+	for (i = 0; i < cardinalidade_cjt(c1); i++) {
+		if (!(pertence_cjt(c2, c1->v[i])))
+			insere_cjt(dif, c1->v[i]);
+	}
+
+	return dif;
+}
+
+conjunto_t *interseccao_cjt(conjunto_t *c1, conjunto_t *c2) {
+	conjunto_t *inter;
+	if ( !(inter = cria_cjt(c1->max)) )
+		return NULL;
+	
+	conjunto_t **menor_cjt = cardinalidade_cjt(c1) < cardinalidade_cjt(c2) ? &c1 : &c2;
+	conjunto_t **maior_cjt = cardinalidade_cjt(c1) > cardinalidade_cjt(c2) ? &c1 : &c2;
+
+	int i;
+	for (i = 0; i < cardinalidade_cjt(*menor_cjt); i++) {
+		if (pertence_cjt(*maior_cjt, (*menor_cjt)->v[i]))
+			insere_cjt(inter, (*menor_cjt)->v[i]);
+	}
+
+	return inter;
+}
+
+conjunto_t *uniao_cjt(conjunto_t *c1, conjunto_t *c2) {
+	conjunto_t *uniao;
+	if ( !(uniao = cria_cjt(c1->max)) )
+		return NULL;
+
+	inicia_iterador_cjt(c1);
+	inicia_iterador_cjt(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++;
+		} else {
+			insere_cjt(uniao, c2->v[c2->ptr]);
+			c2->ptr++;
+		}
+	}
+
+	conjunto_t **ainda_falta = c1->ptr == cardinalidade_cjt(c1) ? &c2 : &c1;
+
+	int i;
+	for (i = (*ainda_falta)->ptr; i < cardinalidade_cjt(*ainda_falta); i++) {
+		insere_cjt(uniao, (*ainda_falta)->v[i]);
+	}
+
+	inicia_iterador_cjt(c1);
+	inicia_iterador_cjt(c2);
+
+	return uniao;
+}
+
+conjunto_t *copia_cjt(conjunto_t *c) {
+	conjunto_t *copia;
+	if ( !(copia = cria_cjt(c->max)) )
+		return NULL;
+
+	int i;
+	for (i = 0; i < cardinalidade_cjt(c); i++) {
+		insere_cjt(copia, c->v[i]);
+	}
+
+	return copia;
+}
+
+conjunto_t *cria_subcjt_cjt(conjunto_t *c, int n) {
+	if (n >= cardinalidade_cjt(c))
+		return copia_cjt(c);
+
+	conjunto_t *sub;
+	if ( !(sub = cria_cjt(c->max)) )
+		return NULL;
+
+	conjunto_t *disponiveis;
+	if ( !(disponiveis = copia_cjt(c)) )
+		return NULL;
+
+	int i;
+	int aleat;
+	for (i = 0; i < n; i++) {
+		aleat = rand() % cardinalidade_cjt(disponiveis);
+		insere_cjt(sub, disponiveis->v[aleat]);
+		retira_cjt(disponiveis, disponiveis->v[aleat]);
+	}
+	
+	destroi_cjt(disponiveis);
+	return sub;
+}
+
+void imprime_cjt(conjunto_t *c) {
+	if (vazio_cjt(c)) {
+		printf("Conjunto vazio.\n");
+		return;
+	}
+
+	int i;
+	for (i = 0; i < cardinalidade_cjt(c)-1; i++)
+		printf("%d ", c->v[i]);
+	printf("%d\n", c->v[cardinalidade_cjt(c)-1]);
+}
+
+void inicia_iterador_cjt(conjunto_t *c) {
+	c->ptr = 0;
+}
+
+int incrementa_iterador_cjt(conjunto_t *c, int *ret_iterador) {
+	*ret_iterador = c->v[c->ptr];
+	c->ptr++;
+	if (c->ptr > cardinalidade_cjt(c))
+		return 0;
+	return 1;
+}
+
+int retira_um_elemento_cjt(conjunto_t *c) {
+	int aleat = rand() % cardinalidade_cjt(c);
+	int retirar = c->v[aleat];
+	int i;
+	for (i = aleat; i < cardinalidade_cjt(c)-1; i++)
+		c->v[i] = c->v[i + 1];
+	c->card--;
+	return retirar;
+}
diff --git a/t1/libfila.c b/t1/libfila.c
new file mode 100644
index 0000000000000000000000000000000000000000..0341819ea38ca14cd3f5b7a87bf09b112fc102c0
--- /dev/null
+++ b/t1/libfila.c
@@ -0,0 +1,80 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "libfila.h"
+
+fila_t *cria_fila() {
+	fila_t *f;
+	if ( !(f = malloc(sizeof(fila_t))) )
+		return NULL;
+	
+	f->tamanho = 0;
+	f->ini = NULL;
+	f->fim = NULL;
+	return f;
+}
+
+fila_t *destroi_fila(fila_t *f) {
+	int i, e = 0, tamanho = tamanho_fila(f);
+	for (i = 0; i < tamanho; i++) {
+		retira_fila(f, &e);
+	}
+
+	free(f);
+	return NULL;
+}
+
+int vazia_fila(fila_t *f) {
+	return f->tamanho == 0;
+}
+
+int tamanho_fila(fila_t *f) {
+	return f->tamanho;
+}
+
+int insere_fila(fila_t *f, int elemento) {
+	nodo_f_t *novo;
+	if ( !(novo = malloc(sizeof(nodo_f_t))) )
+		return 0;
+	novo->elem = elemento;
+	novo->prox = NULL;
+
+	(f->tamanho)++;
+
+	if (tamanho_fila(f) == 1) {
+		f->ini = novo;
+		f->fim = novo;
+		return 1;
+	}
+
+	f->fim->prox = novo;
+	f->fim = novo;
+	return 1;
+}
+
+int retira_fila(fila_t *f, int *elemento) {
+	if (vazia_fila(f))
+		return 0;
+	
+	*elemento = f->ini->elem;
+	nodo_f_t *temp = f->ini->prox;
+	free(f->ini);
+	f->ini = temp;
+	(f->tamanho)--;
+	return 1;
+}
+
+void imprime_fila(fila_t *f) {
+	if (vazia_fila(f))
+		return;
+
+	nodo_f_t *atual = f->ini;
+	printf("%d", atual->elem);
+
+	int i;
+	for (i = 1; i < tamanho_fila(f); i++) {
+		atual = atual->prox;
+		printf(" %d", atual->elem);
+	}
+	
+	printf("\n");
+}
diff --git a/t1/libfila.o b/t1/libfila.o
new file mode 100644
index 0000000000000000000000000000000000000000..63a7a6ae05d9a72d25341029a9ebaeafde5b2e92
Binary files /dev/null and b/t1/libfila.o differ
diff --git a/t1/liblef.c b/t1/liblef.c
new file mode 100644
index 0000000000000000000000000000000000000000..4d53fd0b3c280f28fce47e3d6740c92fa7210e57
--- /dev/null
+++ b/t1/liblef.c
@@ -0,0 +1,26 @@
+#include <stdlib.h>
+
+lef_t *cria_lef() {
+	/*TODO: não implementado*/
+	return NULL;
+}
+
+lef_t *destroi_lef(lef_t *l) {
+	/*TODO: não implementado*/
+	return NULL;
+}
+
+int adiciona_inicio_lef (lef_t *l, evento_t *evento) {
+	/*TODO: não implementado*/
+	return 0;
+}
+
+int adiciona_ordem_lef (lef_t *l, evento_t *evento) {
+	/*TODO: não implementado*/
+	return 0;
+}
+
+evento_t *obtem_primeiro_lef (lef_t *l) {
+	/*TODO: não implementado*/
+	return NULL;
+}
diff --git a/t1/makefile b/t1/makefile
index 52c38d35a9c811657c10dddab2712d76106fdfdb..e210452796018bd7073c8b37a44bd0eb2e899e15 100644
--- a/t1/makefile
+++ b/t1/makefile
@@ -6,10 +6,13 @@ LDFLAGS = -lm
 CC = gcc
 
 # arquivos-objeto
-	objects = mundo.o libconjunto.o  liblef.o libfila.o 
+	objects = mundo.o libconjunto.o liblef.o libfila.o 
      
-mundo: mundo.o libconjunto.o  liblef.o libfila.o
-	$(CC) -o mundo mundo.o libconjunto.o  liblef.o libfila.o $(LDFLAGS)
+mundo: mundo.o libconjunto.o liblef.o libfila.o
+	$(CC) -o mundo mundo.o libconjunto.o liblef.o libfila.o $(LDFLAGS)
+
+teste: teste.o liblef.o
+	$(CC) -o teste teste.o liblef.o $(LDFLAGS)
 
 libconjunto.o: libconjunto.c
 	$(CC) -c $(CFLAGS) libconjunto.c
@@ -23,7 +26,8 @@ libfila.o: libfila.c
 mundo.o: mundo.c
 	$(CC) -c $(CFLAGS) mundo.c
 
+teste.o: teste.c
+	$(CC) -c $(CFLAGS) teste.c
+
 clean:
 	rm -f $(objects) mundo
-
-
diff --git a/t1/mundo.c b/t1/mundo.c
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/t1/teste b/t1/teste
new file mode 100755
index 0000000000000000000000000000000000000000..381c674840818c707f985538d6e15643b0e32691
Binary files /dev/null and b/t1/teste differ
diff --git a/t1/teste.c b/t1/teste.c
new file mode 100644
index 0000000000000000000000000000000000000000..764bb1605bd2b57ab5c8ff2c3dee9293a91a20d9
--- /dev/null
+++ b/t1/teste.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include <stdlib.h>
+/* #include "libconjunto.h" */
+/* #include "libfila.h" */
+#include "liblef.h"
+
+int main() {
+
+	return 0;
+}
diff --git a/t1/teste.o b/t1/teste.o
new file mode 100644
index 0000000000000000000000000000000000000000..fcb4c8d3b7a3c97c529677263b89f452179bc9df
Binary files /dev/null and b/t1/teste.o differ