(*) добовил немного коментариив в код
(+) новые паттерны