https://vu-ss.blogspot.com/2019/11/cs504-assignment-no-2-fall.html