Існує відома теорема про те, що будь-яка перестановка може бути розкладена на набір циклів . Ваше завдання - написати найкоротшу можливу програму для цього.
Вхід:
Дві лінії. Перший містить число N
, другий містить N
виразні цілі числа в діапазоні, [0,N-1]
розділеному пробілами. Ці цілі числа представляють перестановку N
елементів.
Вихід:
По одному рядку для кожного циклу перестановки. Кожен рядок повинен бути розділеним пробілом списком цілих чисел у порядку циклу.
Цикли можна виводити в будь-якому порядку, і кожен цикл може виводитися, починаючи з будь-якої позиції.
Приклад 1:
8
2 3 4 5 6 7 0 1
Цей вхід кодує перестановку 0-> 2, 1-> 3, 2-> 4, 3-> 5, 4-> 6, 5-> 7, 6-> 0, 7-> 1. Це розпадається на такі цикли:
0 2 4 6
1 3 5 7
Не менш дійсним був би вихід
5 7 1 3
2 4 6 0
Приклад 2:
8
0 1 3 4 5 6 7 2
дійсний вихід:
0
1
4 5 6 7 2 3
>C.