Source: http://www.cs.ucr.edu/~ehwang/courses/cs120a/00winter/binary.pdf