#arc111c. [arc111_c]Too Heavy

[arc111_c]Too Heavy

题目描述

NN 个人,编号从 11NN,和 NN 个行李,编号从 11NN。第 ii 个人的重量为 aia_i,第 jj 个行李的重量为 bjb_j。初始时,第 ii 个人携带第 pip_i 个行李。我们希望进行以下操作零次或多次,使得每个人都携带编号与其相同的行李。

  • 选择 i,j(ineqj)i,j (i \\neq j),交换第 ii 个人和第 jj 个人的行李。

然而,当一个人携带的行李的重量大于等于他自己的重量时,这个人会变得疲倦,无法参与后续的操作(也就是说,我们不能选择他作为 iijj)。特别地,如果 aileqbpia_i \\leq b_{p_i},第 ii 个人将无法参与任何操作。

判断是否存在一系列操作可以达到目标,并且如果存在,构造一种满足条件且操作次数最少的操作序列。

约束条件

  • 1leqNleq2000001 \\leq N \\leq 200000
  • 1leqai,bileq1091 \\leq a_i,b_i \\leq 10^9
  • pp1,ldots,N1, \\ldots, N 的一个排列。
  • 输入中的所有数字都是整数。

输入

输入包含以下格式的标准输入:

NN a1a_1 a2a_2 ldots\\ldots aNa_N b1b_1 b2b_2 ldots\\ldots bNb_N p1p_1 p2p_2 ldots\\ldots pNp_N

输出

如果不存在一系列操作可以达到目标,则输出 -1。否则,按照以下格式输出一系列操作:

KK i1i_1 j1j_1 i2i_2 j2j_2 :: iKi_K jKj_K

其中,KK 是操作次数,it,jti_t, j_t 表示第 tt 次操作中选择的人员。

如果存在多个解,任何一个都会被接受。


示例输入 1

4
3 4 8 6
5 3 1 3
3 4 2 1

示例输出 1

3
3 4
1 3
4 2

初始时,第 1,2,3,41, 2, 3, 4 个人携带的行李重量分别为 1,3,3,51, 3, 3, 5,因此没有人感到疲倦。

首先,我们选择第 33 和第 44 个人进行交换。现在,第 1,2,3,41, 2, 3, 4 个人携带的行李重量分别为 1,3,5,31, 3, 5, 3,因此暂时没有人疲倦。

其次,我们选择第 11 和第 33 个人进行交换。现在,第 1,2,3,41, 2, 3, 4 个人携带的行李重量分别为 5,3,1,35, 3, 1, 3,因此第 11 个人感到疲倦。

最后,我们选择第 44 和第 22 个人进行交换。现在,第 1,2,3,41, 2, 3, 4 个人携带的行李重量分别为 5,3,1,35, 3, 1, 3,因此没有人感到疲倦。

这个操作序列使得每个人都携带了正确的行李,并且是操作次数最少的,因此是有效的。


示例输入 2

4
1 2 3 4
4 3 2 1
4 3 2 1

示例输出 2

-1

无法找到一系列操作来达到目标。


示例输入 3

1
58
998244353
1

示例输出 3

0

初始状态已经达到了目标。