Исходные данные
третья версия, методы реализованы корректнее