Solution in WIP. Need to be fixed.