Не знаю насколько мое решение правильное, может быть ещё у кого-нибудь есть соображения? Задача действительно интересная.