CSE240A Project at UCSD (do not copy it for the class)