Solution by Dave Cross