Solution by Andrew Grangaard.