Solution by Dave Jacoby