https://vu-ss.blogspot.com/2020/06/cs604-assignment-2-solution.html