Source: https://faculty.kfupm.edu.sa/ICS/sukairi/swe214(022)/4-Analyzing the Problem.pdf