Solution by Tim Smith