Третий открытый Зеленоградский турнир 2007

Фирменный товар

На рынке n торговцев. Каждый имеет для обмена некоторый фирменный товар (ни у кого другого такого товара нет). Кроме того, каждый хочет в результате обменов получить некоторый фирменный товар, имеющийся на рынке, причем оказалось так, что для любого товара его хочет получить ровно один торговец.

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

Требуется написать программу, которая находила бы минимальное количество дней, необходимых для того, чтобы каждый торговец получил бы требуемый ему товар, а также вариант организации обменов, при котором достигается минимум.

Входные данные

В первой строке теста находится натуральное число n, не превосходящее 5000. Затем во второй строке перечислено ровно n номеров товаров, необходимые торговцам. Если на месте i находится число j, то это означает, что товар, нужный торговцу номер i, изначально находится у торговца номер j. Номера товаров отделяются друг от друга символом "пробел".

Выходные данные

Для каждого из тестов требуется указать минимальное количество дней m, требуемых для осуществления обменов. Затем в последующих m строках следует указать, как именно следует осуществлять обмены. Одна строка соответствует одному дню. В начале строки идет число, указывающее количество обменов в этот день. Далее перечисляются все пары торговцев, обменивающихся в этот день. Пары отделяются друг от друга символом "пробел", номера торговцев в паре отделяются друг от друга символом "-". Если существует несколько способов осуществить обмены за минимальное время, то достаточно вывести описание любого из них.

Пример

Входные данные:
7
2 1 3 5 6 7 4

Выходные данные:
2
3 1-2 4-5 7-6
1 5-7

Автор задачи: Филимоненков Д.О.