impl skip list map as an exercise