Переписал под более общий случай.