какая логика - у нас есть стек, когда степ начался, мы кладем его в стек, когда закончился - достаем последний из стека, и добавляем его в дети к предыдущему. Чтобы это работало надо поддерживать инвариант, что стек не пуст. Вначале он инициализируется с рутовым степом. Однако, если событий завершения степов произойдет больше, чем событий начала - то мы достанем со стека последний элемент, и инвариант нарушится. Поэтому я отслеживаю эту ситуацию и, если надо, добавляю еще один рут степ.