v.2

Рассмотрено больше возможных случаев. уменьшено количество
повторяющегося кода.