Что-то жутко большой размер кода для такой задачи.