https://vu-ss.blogspot.com/2019/12/cs506-assignment-2-fall.html