Solutions by Eric Cheung.