first commit, complete solution, will double check