Source: http://www.cs.tau.ac.il/~msagiv/courses/pl17/overview.pdf