Ну вот, всегда так с ЦД.

И инвариант не тот,

и школярская привычка в программировании использовать одно буквенные идентификаторы, при этом визуально мало различимые ( i , j ), а не слова наполненные смыслом из предметной области,

и ошибку признаем, но алгоритм не правим,

и запись алгоритма неизвестно на каком языке, "Правда, программист не хочет его брать, говорит, что не понимает",

и следуя принципу максимальной простоты, т.е. автомата Калашникова и применив декомпозицию необходимость в ЦД исчезнет.