#P16395. 二分图令牌归位

二分图令牌归位

题目背景

星际运输站由两组完全不同的停靠区组成:红色停靠区与蓝色停靠区。每个停靠点上都有一枚带编号的令牌。一次系统故障打乱了同色令牌的位置,而运输机械臂只能跨越红、蓝停靠区之间的通道交换两枚令牌。

为了避免机械臂反复磨损同一条通道,工程师规定:绝大多数通道至多使用一次,整次修复过程中最多只能有一条通道被使用两次。请构造一套合法的交换方案,使所有令牌回到对应的停靠点。

题目描述

有一张完全二分图:

  • 左部有 nn 个红色点,编号为 0,1,,n10,1,\ldots,n-1
  • 右部有 mm 个蓝色点,编号为 0,1,,m10,1,\ldots,m-1
  • 每个红色点都与每个蓝色点相连。

每个点上恰好放有一枚令牌。令牌具有颜色和编号。

初始时:

  • 红色点 ii 上放着编号为 redired_i 的红色令牌;
  • 蓝色点 jj 上放着编号为 bluejblue_j 的蓝色令牌。

数组 redred0,1,,n10,1,\ldots,n-1 的一个排列,数组 blueblue0,1,,m10,1,\ldots,m-1 的一个排列。

你的目标是让所有令牌归位:

  • 红色点 ii 上最终必须放置编号为 ii 的红色令牌;
  • 蓝色点 jj 上最终必须放置编号为 jj 的蓝色令牌。

每次操作选择一个红色点 rr 和一个蓝色点 bb,交换这两个点上的令牌。该操作记为边 (r,b)(r,b)

你输出的方案必须同时满足:

  1. 操作次数不超过 10001000
  2. 每条边至多使用两次;
  3. 至多有一条边被使用两次,其他边均至多使用一次;
  4. 执行全部操作后,所有令牌均归位。

题目保证一定存在满足要求的方案。

输入格式

第一行包含两个整数 n,mn,m

第二行包含 nn 个整数:

red0,red1,,redn1.red_0,red_1,\ldots,red_{n-1}.

第三行包含 mm 个整数:

blue0,blue1,,bluem1.blue_0,blue_1,\ldots,blue_{m-1}.

输出格式

第一行输出一个整数 KK,表示操作次数。

接下来 KK 行,每行输出两个整数 r,br,b,表示交换红色点 rr 与蓝色点 bb 上的令牌。

只要输出任意一组满足全部限制的方案即可。

数据范围

2n,m100.2\le n,m\le100.

redred0,1,,n10,1,\ldots,n-1 的一个排列,blueblue0,1,,m10,1,\ldots,m-1 的一个排列。

样例 1

输入

2 2
0 1
0 1

输出

0

说明

所有令牌已经位于正确位置,不需要执行操作。

样例 2

输入

2 2
1 0
0 1

输出

3
0 0
1 0
0 0

说明

(0,0)(0,0) 被使用两次,其余边至多使用一次。执行三次交换后,两枚红色令牌归位,蓝色令牌也回到原位置。

样例 3

输入

4 4
1 0 3 2
1 0 3 2

输出

8
2 2
3 3
3 2
2 3
0 0
1 1
1 0
0 1

输出方案不唯一,任何合法方案都会被接受。