diff --git a/src/main.c b/src/main.c
index d675d0b0fcedd2d78b43a1030ec15f7d2ce7fb40..2c0a665ec9cca52d1b3d5d2741c6fece6aa29f36 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,13 +1,56 @@
+#define _GNU_SOURCE
+
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include "common.h"
+#include "vector.h"
+
+void help(const char* callname) {
+	fprintf(stderr, "\nUSAGE:    %s  <INPUT_FILE>  <OUTPUT_FILE>\n", callname);
+}
+
+int_t read_int(FILE* file) {
+	char* line;
+	size_t len;
+	char* rest;
+	getline(&line, &len, file);
+	return strtol(line, &rest, 10);
+}
+
+bool read_vector_int(FILE* file, vector_int_t* vector) {
+	char* line;
+	size_t len;
+	char* rest;
+	for (size_t i = 0; i < vector->dim; ++i) {
+		getline(&line, &len, file);
+		vector->data[i] = strtol(line, &rest, 10);
+	}
+}
 
 
 int main(int argc, char** argv) {
-	fprintf(stderr, "USAGE:    %s  <INPUT_FILE>  <OUTPUT_FILE>\n", argv[0]);
-	char* ipath = "/dev/stdin";
-	char* opath = "/dev/stdout";
-	if (argc > 1) ipath = argv[1];
+	if (argc <= 1) help(argv[0]);
+	char* ipath = NULL;
+	char* opath = NULL;
+	if (argc > 1) {
+		ipath = argv[1];
+		if (access(ipath, F_OK) == -1) {
+			fprintf(stderr, "IFILE:   [ %s ]   file does not exist !", ipath);
+			return EXIT_FAILURE;
+		}
+	}
 	if (argc > 2) opath = argv[2];
+	// READ
+	FILE* ifile = ipath != NULL ? fopen(ipath, "r") : stdin;
+	const size_t dim = read_int(ifile);
+	const int_t nclusters = read_int(ifile);
+	int_t next;
+	while ()
+		fscanf(ifile, "%ld", &next);
+	// WRITE
+	FILE* ofile = opath != NULL ? fopen(opath, "w") : stdout;
 	// TODO
 	return EXIT_SUCCESS;
 }
diff --git a/src/vector.c b/src/vector.c
index d30b3ef765c94d6df15aafe2101ce57d1eea55ac..c4f7dba0e1c1743af1333d84d0052ea405231d60 100644
--- a/src/vector.c
+++ b/src/vector.c
@@ -8,7 +8,8 @@
 
 vector_int_t* vector_int_create(const size_t dim, const int_t* data) {
 	vector_int_t* v;
-	if ((v = malloc(dim * sizeof(int))) == NULL) return NULL;
+	//if ((v = malloc(dim * sizeof(int))) == NULL) return NULL;
+	if ((v = calloc(dim, sizeof(int))) == NULL) return NULL;
 	v->dim = dim;
 	for (size_t i = 0; i < dim; ++i) v->data[i] = data[i];
 	return v;