https://vu-ss.blogspot.com/2020/01/cs502-assignment-3-solution-fall.html