Assignment 6 of Stanford's CS193P