Source: https://www.cs.cornell.edu/courses/cs1110/2016sp/lectures/03-01-16/9B.Randomness.pdf