Source: https://www.cs.princeton.edu/courses/archive/fall04/cos226/lectures/digraph.4up.pdf