Solution by Tim King.