Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L. & Stein, CliffordIntroduction to Algorithms, 3rd Edition