500 data structures and algorithms practice problems and their solutions pdf