Это самое красивое решение, которое я видел до сих пор (от @josusanmartin), но оно не оптимально (набрал 3.002)