Готовое решение не оптимально по памяти, грязный код