Хорошо известна теорема о том, что любая перестановка может быть разложена на множество циклов . Ваша задача - написать максимально короткую программу для этого.
Входные данные:
Две строчки Первый содержит число 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.