diff --git a/t1/enunciado.pdf b/t1/enunciado.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..056e1963fbf1ba00084ab40605e12ee17a1028fa
Binary files /dev/null and b/t1/enunciado.pdf differ
diff --git a/t1/libconjunto.h b/t1/libconjunto.h
new file mode 100644
index 0000000000000000000000000000000000000000..bae2d7af7b107a6652cba9e4315ea88826dfc912
--- /dev/null
+++ b/t1/libconjunto.h
@@ -0,0 +1,136 @@
+/* 
+ * TAD conjunto
+ * Autores: 
+ *    Andre Ricardo Abed Gregio
+ *    Fabiano Silva
+ *    Luis Carlos Erpen de Bona
+ *    Marcos Alexandre Castilho 
+ *
+ * Versao 1.0.0 de 10/11/2021
+ * Versao 1.0.1 de 16/08/2022
+ * Versao 1.1.0 de 17/11/2022
+ */
+
+struct conjunto {
+    int max;    /* tamanho maximo do vetor atualmente alocado     */
+    int card;   /* cardinalidade, isto eh, tamanho usado ate max  */
+    int ptr;    /* ponteiro para algum indice do vetor (iterador) */
+    int *v;     /* vetor de inteiros com no maximo max elementos  */
+};
+typedef struct conjunto conjunto_t;
+
+/*
+ * Cria um conjunto vazio e o retorna, se falhar retorna NULL.
+ * max eh o tamanho maximo do conjunto, isto eh, o tamanho maximo do vetor
+ */
+conjunto_t *cria_cjt (int max);
+
+/*
+ * Remove todos os elementos do conjunto, libera espaco e devolve NULL.
+ */
+conjunto_t *destroi_cjt (conjunto_t *c);
+
+/*
+ * Retorna 1 se o conjunto esta vazio e 0 caso contrario.
+ */
+int vazio_cjt (conjunto_t *c);
+
+/*
+ * Retorna a cardinalidade do conjunto, isto eh, o numero de elementos presentes nele.
+ */
+int cardinalidade_cjt (conjunto_t *c);
+
+/*
+ * Insere o elemento no conjunto, garante que nao existam repeticoes.
+ * Retorna 1 se a operacao foi bem sucedida. Se tentar inserir elemento existente,
+ * nao faz nada e retorna 1 tambem. Retorna 0 em caso de falha por falta de espaco.
+ */
+int insere_cjt (conjunto_t *c, int elemento);
+
+/*
+ * Remove o elemento 'elemento' do conjunto caso ele exista.
+ * Retorna 1 se a operacao foi bem sucedida e 0 se o elemento nao existe.
+ */
+int retira_cjt (conjunto_t *c, int elemento);
+
+/*
+ * Retorna 1 se o elemento pertence ao conjunto e 0 caso contrario.
+ */
+int pertence_cjt (conjunto_t *c, int elemento);
+
+/*
+ * Retorna 1 se o conjunto c1 esta contido no conjunto c2 e 0 caso contrario.
+ */
+int contido_cjt (conjunto_t *c1, conjunto_t *c2);
+
+/*
+ * Retorna 1 se o conjunto c1 eh igual ao conjunto c2 e 0 caso contrario.
+ */
+int sao_iguais_cjt (conjunto_t *c1, conjunto_t *c2);
+
+/*
+ * Cria e retorna o conjunto diferenca entre c1 e c2, nesta ordem.
+ * Retorna NULL se a operacao falhou.
+ */
+conjunto_t *diferenca_cjt (conjunto_t *c1, conjunto_t *c2);
+
+/*
+ * Cria e retorna o conjunto interseccao entre os conjuntos c1 e c2.
+ * Retorna NULL se a operacao falhou.
+ */
+conjunto_t *interseccao_cjt (conjunto_t *c1, conjunto_t *c2);
+
+/*
+ * Cria e retorna o conjunto uniao entre os conjunto c1 e c2.
+ * Retorna NULL se a operacao falhou.
+ */
+conjunto_t *uniao_cjt (conjunto_t *c1, conjunto_t *c2);
+
+/*
+ * Cria e retorna uma copia do conjunto c e NULL em caso de falha.
+ */
+conjunto_t *copia_cjt (conjunto_t *c);
+
+/*
+ * Cria e retorna um subconjunto com elementos aleatorios do conjunto c.
+ * Se o conjunto for vazio, retorna um subconjunto vazio.
+ * Se n >= cardinalidade (c) entao retorna o proprio conjunto c.
+ * Supoe que a funcao srand () tenha sido chamada antes.
+ */
+conjunto_t *cria_subcjt_cjt (conjunto_t *c, int n);
+
+/*
+ * Imprime os elementos do conjunto sempre em ordem crescente,
+ * mesmo que a estrutura interna nao garanta isso.
+ * Na impressao os elementos sao separados por um unico espaco
+ * em branco entre os elementos, sendo que apos o ultimo nao
+ * deve haver espacos em branco. Ao final imprime um \n.
+ */
+void imprime_cjt (conjunto_t *c);
+
+/*
+ * As funcoes abaixo implementam um iterador que vao permitir
+ * percorrer os elementos do conjunto.
+ * O ponteiro ptr da struct (iterador) pode ser inicializado para apontar 
+ * para o primeiro elemento e incrementado ate' o ultimo elemento 
+ * do conjunto.
+ */
+
+/*
+ * Inicializa ptr usado na funcao incrementa_iterador 
+ */
+void inicia_iterador_cjt (conjunto_t *c);
+
+/*
+ * Devolve no parametro ret_iterador o elemento apontado e incrementa o iterador.
+ * A funcao retorna 0 caso o iterador ultrapasse o ultimo elemento, ou retorna
+ * 1 caso o iterador aponte para um elemento valido (dentro do conjunto).
+ */
+int incrementa_iterador_cjt (conjunto_t *c, int *ret_iterador);
+
+/*
+ * Escolhe um elemento qualquer do conjunto para ser removido, o remove e
+ * o retorna.
+ * Nao faz teste se conjunto eh vazio, deixa para main fazer isso       
+ */
+int retira_um_elemento_cjt (conjunto_t *c);
diff --git a/t1/libfila.h b/t1/libfila.h
new file mode 100644
index 0000000000000000000000000000000000000000..74512a0acb21e39ed670646f26ea2873dabdb768
--- /dev/null
+++ b/t1/libfila.h
@@ -0,0 +1,48 @@
+/*
+ * TAD fila
+ * Autores:
+ *    Marcos Alexandre Castilho
+ *    Luis Carlos Erpen de Bona
+ *
+ * Primeira versão em 18/10/2019
+ * Versao 1.0.0 de 10/11/2021
+ * Versao 1.0.1 de 08/2022
+ * Versao 2.0.0 de 14/12/2022
+ */
+
+struct nodo_f {
+    int elem;
+    struct nodo_f *prox;
+};
+typedef struct nodo_f nodo_f_t;
+
+struct fila {
+    nodo_f_t *ini;
+    nodo_f_t *fim;
+    int tamanho; /* numero de elementos na fila */
+};
+typedef struct fila fila_t;
+
+/* Cria uma fila vazia e a retorna, se falhar retorna NULL. */
+fila_t *cria_fila ();
+
+/* Remove todos os elementos da fila, libera espaco e devolve NULL. */
+fila_t *destroi_fila (fila_t *f);
+
+/* Retorna 1 se a fila esta vazia e 0 caso contrario. */
+int vazia_fila (fila_t *f);
+
+/* Retorna o numero de elementos da fila. */
+int tamanho_fila (fila_t *f);
+
+/* Insere o elemento no final da fila (politica FIFO).
+ * Retorna 1 se a operacao foi bem sucedida e 0 caso contrario. */
+int insere_fila (fila_t *f, int elemento);
+
+/* Remove o elemento do inicio da fila (politica FIFO) e o retorna
+ * no parametro *elemento. Retorna 1 se a operacao foi bem sucedida
+ * e 0 caso contrario. */
+int retira_fila (fila_t *f, int *elemento);
+
+/* para depuracao */
+void imprime_fila (fila_t *f);
diff --git a/t1/liblef.h b/t1/liblef.h
new file mode 100644
index 0000000000000000000000000000000000000000..347c68d8832780a1f42cd582be8724d9ecb8853a
--- /dev/null
+++ b/t1/liblef.h
@@ -0,0 +1,70 @@
+/* Implementa o TAD Lista de Eventos Futuros (LEF) 
+ * Feito em C para a disciplina CI1001 - Programacao 1 
+ * Autor: Luis C. E. Bona 
+ *
+ * Versao 1.0.0 10/11/2021
+ * Versao 1.0.1 16/08/2022
+ * Versao 2.0.0 14/12/2022
+ */
+
+/* A  LEF é uma lista que armazena eventos ordenados pelo membro tempo 
+ * do tipo evento_t. Cada evento pode ter um tipo e armazenar em dados 
+ * diferentes estruturas de dados que permitem descrever cada evento. */
+
+/*
+ * evento_t possui os dados que descrevem os eventos 
+ */
+typedef  struct evento {
+    int tempo;  /* tempo logico do evento */
+    int tipo;   /* inteiro para diferenciar os diferentes tipos de evento */
+    int dado1;  /* um inteiro para guardar dados do evento */
+    int dado2;  /* um inteiro para guardar dados do evento */
+} evento_t;
+
+/*
+ * nodo_t eh uma estrutura interna que representa cada nodo da LEF.
+ * Externamente o usuario da biblioteca nao vai receber essa estrutura para 
+ * evitar acesso direto ao ponteiro prox.
+ */
+typedef struct nodo_lef {
+    evento_t *evento;
+    struct nodo_lef *prox;
+} nodo_lef_t;
+
+/*
+ * Representacao da LEF 
+ */
+typedef struct lef {
+    nodo_lef_t *Primeiro;
+} lef_t;
+
+/* 
+ * Cria uma LEF vazia 
+ */
+lef_t *cria_lef ();
+
+/* 
+ * Destroi a LEF e retorna NULL. 
+ */ 
+lef_t *destroi_lef (lef_t *l);
+
+/* 
+ * Adiciona um evento na primeira posicao da LEF. Uma nova copia
+ * da estrutura evento sera feita. 
+ * Retorna 1 em caso de sucesso, 0 caso contrario.
+ */ 
+int adiciona_inicio_lef (lef_t *l, evento_t *evento);
+
+/* 
+ * Adiciona um evento de acordo com o valor evento->tempo na LEF. 
+ * Uma nova copia da estrutura evento sera feita 
+ * Retorna 1 em caso de sucesso, 0 caso contrario.
+ */
+int adiciona_ordem_lef (lef_t *l, evento_t *evento);
+
+/* 
+ * Retorna e retira o primeiro evento da LEF. 
+ * A responsabilidade por desalocar
+ * a memoria associada eh de quem chama essa funcao.
+ */
+evento_t *obtem_primeiro_lef (lef_t *l);
diff --git a/t1/makefile b/t1/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..52c38d35a9c811657c10dddab2712d76106fdfdb
--- /dev/null
+++ b/t1/makefile
@@ -0,0 +1,29 @@
+# Makefile de exemplo (Manual do GNU Make)
+     
+CFLAGS = -Wall -std=c90 -g  # flags de compilacao
+LDFLAGS = -lm
+
+CC = gcc
+
+# arquivos-objeto
+	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)
+
+libconjunto.o: libconjunto.c
+	$(CC) -c $(CFLAGS) libconjunto.c
+
+liblef.o: liblef.c
+	$(CC) -c $(CFLAGS) liblef.c
+
+libfila.o: libfila.c
+	$(CC) -c $(CFLAGS) libfila.c
+
+mundo.o: mundo.c
+	$(CC) -c $(CFLAGS) mundo.c
+
+clean:
+	rm -f $(objects) mundo
+
+