data structure and algorithms: practice and also as a library.