#loj4167. 「CCO 2024」Pizza Party

「CCO 2024」Pizza Party

[AdditionalFile4167.zip](file://AdditionalFile4167.zip?type=additional_file)

#4167. 「CCO 2024」Pizza Party

标签: 传统 | 时间限制: 4000 ms | 内存限制: 1024 MiB |

题目描述

译自 CCO 2024 Day1 T2「Pizza Party

Troy 正在筹备他最新的项目 - 黑客松(HackCCO)!众所周知,任何黑客松活动的最大吸引力之一就是免费食物。为了确保黑客松的空前成功,Troy 订购了一辆装得满满的推车,上面摞着足足 NN 个披萨,从上往下第 ii 个披萨的口味是 aia_i

推车到达后,Troy 需要把这些披萨整理成若干摞放在长桌子上。他需要逐个从推车顶端取走披萨放到桌子上,每次可以选择把披萨放在现有某摞披萨的上面,或者在桌子上新建一摞。

NN 个饥肠辘辘的黑客松参与者排队依次从桌子上取披萨。Troy 知道排队第 ii 个人喜欢的披萨口味是 bib_i。当第 ii 个人走到桌子旁时,如果他们看到摞在最上面的披萨中有他们喜欢的口味,他们就会随机拿走其中一个。如果没有他们喜欢的口味,他们就会空手而归。

当然,饥饿的程序员可不是快乐的程序员,所以 Troy 不想让任何人饿着肚子离开。因此,他需要你的帮助,找到一种摆放披萨的方法,让所有人都能吃到喜欢的口味。同时,在所有满足条件的方案中,Troy 还希望找到一种能使桌子上的摞数最少的方法(毕竟桌子也不是无限长的)。帮他找到这样的方案,或者告诉他这根本不可能做到!

输入格式

第一行包含一个整数 NN

第二行包含 NN 个用空格隔开的整数 a1,,aN (1aiN)a_{1}, \ldots, a_{N}\ (1 \leq a_i \leq N),表示从上往下第 ii 个披萨的口味。

第三行包含 NN 个用空格隔开的整数 b1,,bN (1biN)b_{1}, \ldots, b_{N}\ (1 \leq b_i \leq N),表示排队第 ii 个参与者喜欢的披萨口味。

输出格式

如果无法找到满意的披萨摆放方式,请输出 1-1

否则,你的输出应该包含三行。第一行输出 KK,即所需的最小摞数。第二行输出 NN 个用空格隔开的整数 c1,,cNc_{1}, \ldots, c_{N} (1ciK)\left(1 \leq c_{i} \leq K\right),表示第 ii 个披萨应该放在编号为 cic_i 的摞上。第三行输出 NN 个用空格隔开的整数 $d_{1}, \ldots, d_{N}\left(1 \leq d_{i} \leq K\right)$,表示排队第 ii 个人从编号为 did_i 的摞上拿取披萨。当第 ii 个参与者走到桌子旁时,该摞最上面的披萨口味必须是 bib_i

样例 1

输入

7
1 2 3 2 2 1 3
2 3 1 2 3 2 1

输出

2
1 2 1 2 1 2 2
1 2 2 2 1 2 1

上图展示了一种披萨的摆放方式,红色、黄色、蓝色分别代表口味 1,2,31,2,3 的披萨。

样例 2

输入

2
1 2
1 1

输出

-1

数据范围与提示

子任务 4 与子任务 5 暂时未知是否可解决。因此,我们只评测前三个子任务。

子任务 分值 NN 的限制 额外限制
11 1212 1N1061 \leq N \leq 10^{6} 所有参与者只喜欢披萨口味 1122
22 1616 1N50001 \leq N \leq 5000 推车上的所有披萨口味都不相同
33 2020 1N1061 \leq N \leq 10^{6}
44 2424 1N50001 \leq N \leq 5000
55 2828 1N1061 \leq N \leq 10^{6}