Почти законченая работа, осталось reduce поправить немного и checkstyle