Source: https://vmls-book.stanford.edu/vmls.pdf