Спершу з'ясуємо, коли масив узагалі коректний. Величина від дедалі більшої множини не може спадати, тому мусить бути неспадним. Крім того, після всіх елементів множина — це \{0, 1, \ldots, n-1\}, отже F_n = n. Якщо щось із цього порушено, відповідь нульова.
Тепер розглянемо, що відбувається на кожному кроці. Нехай \mathit{last} = F_{i-1} — поточне значення перед позицією .
Крок без зростання (F_i = \mathit{last}). Значення не змінилось, отже на позицію поставили щось, що його не «розблокувало», — тобто будь-яке ще не використане число, крім самого . Ми поки не фіксуємо, яке саме: така позиція залишається «вільним слотом», і чим її заповнити, вирішиться пізніше.
Крок зі зростанням (F_i > \mathit{last}). Щоб зрушив з місця, на позицію мусить потрапити рівно число — тут вибору немає. А щоб він стрибнув аж до F_i, усі числа
мають уже бути присутніми серед перших елементів. Їх рівно \mathit{nums} = F_i - \mathit{last} - 1 штук.
Скільки є місць, куди їх можна було покласти? Серед перших позицій уже стоять різних чисел, серед яких обов'язково всі 0, 1, \ldots, \mathit{last}-1 (бо дорівнює ). Отже, позицій, зайнятих числами, більшими за , рівно
і саме це і є ті «вільні слоти», які ми досі не заповнювали.
Тепер вибір: які саме із слотів отримають потрібні числа і в якому порядку. Це кількість розміщень
Відповідь — добуток цих величин по всіх кроках зі зростанням (кроки без зростання множників не дають, бо їхній вибір відкладається). Оскільки F_n = n, наприкінці всі слоти виявляються заповненими, тож жодної невизначеності не лишається.
Факторіали та обернені до них за модулем рахуємо заздалегідь, тому весь розв'язок — це один прохід за .