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