Algorithms and Data Stuructures