Solution by Steve Hart.