some data structures and algorithms