SP1421 FIRM - Goods

题目描述

市场上有 $n$ 个商人。每个商人拥有一些独一无二的商品(没有人拥有相同的商品)。同时,每位商人也想获得市场上的其他某些商品。令人惊讶的是,对于市场上的每种商品,恰好有一个商人想要它。 为防止欺骗,市场上只允许成对进行商品交换。而且,每个商人每天最多只能进行一次交易。不过,总的交易次数不设上限。一次交易指的是一个商人将自己所有的商品与另一位商人进行全部交换(不能部分交换)。 你的任务是编写一个程序,计算出每个商人获得他想要商品所需的最少天数,并输出一种实现这一目标的交换方案。

输入格式

第一行是一个整数 $n$,表示商人的数量($n \leq 5000$)。第二行包含 $n$ 个整数,表示每个商人需要的商品编号。如果第 $i$ 位商人需要的商品是由第 $j$ 位商人持有,用整数 $j$ 表示这一关系。

输出格式

输出完成交易所需的最少天数 $m$。接下来的 $m$ 行中,每行都描述一天内的交易情况。每行以该天的交易次数开头,接着输出每对进行交换的商人,用 `-` 符号连接。如果存在多种满足条件的交换方案,可以输出任意一种。 ## 数据范围 $n \leq 5000$ **本翻译由 AI 自动生成**