https://vuinsider.blogspot.com/2022/02/cs408-assignment-3-solution.html