cs106a assignment 4