https://www.vuinsider.com/2020/05/cs401-assignment-1-solution-spring-2020.html