Source: https://people.cs.vt.edu/prsardar/slides/L21_ProblemDefinition_FoglerCh4.pdf