Primera versión funcionando (Falta optimizar algo y comentar, pero funciona)