This is the assignment 4 of CS252