actualizado en parte con la solucion