P17684 [IO 2025 #2] 罗斯托夫的排列

题目描述

顿河畔罗斯托夫市的市政府决定整理顿河沿岸的景点列表。每个景点都有一个互不相同的编号(即它的评分),需要把景点按评分从小到大排列。 然而,移动景点并不容易!只有在技术上允许移动的两个位置之间,才能交换景点。这些允许交换的位置对由城市的基础设施网络决定。 形式化地,给定一个由 $n$ 个互不相同的整数组成的数组 $a$。只有当位置对 $(i,j)$ 出现在允许交换的位置对列表中时,才能执行交换操作 `swap`,交换 $a_i$ 与 $a_j$。 请判断能否仅通过这些允许的交换,把数组按从小到大排序。如果可以,还需要给出一组符合下述输出限制的交换操作;不要求操作次数最少。

输入格式

第一行包含一个整数 $n$($1\le n\le2000$),表示景点数量。 第二行包含 $n$ 个互不相同的整数 $a_1,a_2,\ldots,a_n$($1\le a_i\le10^9$),表示景点的评分。 第三行包含一个整数 $m$($0\le m\le\frac{n(n-1)}2$),表示允许交换的位置对数量。 接下来 $m$ 行,每行包含两个整数 $u_i,v_i$($1\le u_i,v_i\le n$,$u_i\ne v_i$),表示可以交换位置 $u_i$ 与 $v_i$ 上的景点。 位置对是无向的:$(u,v)$ 与 $(v,u)$ 表示相同的交换。

输出格式

如果能够仅使用允许的交换把数组按评分从小到大排序,输出 `YES`;否则输出 `NO`。 如果输出 `YES`,在下一行输出操作次数 $q$($0\le q\le4\cdot10^6$),然后在下一行输出 $q$ 个整数,依次表示执行的交换操作编号。一个操作编号对应输入中的一对允许交换的位置;这些位置对按输入顺序从 $1$ 开始编号。如果 $q=0$,操作列表为空。