Algorithms and program design