685.621 Foundations of Algorithms