Solution by Tim Potapov