Bobo 最近学习了拓扑排序的概念。有一天,他观察到一个有向无环图 (DAG) $G = (V, E)$,其中 $|V| = n$ 个顶点编号为 $1$ 到 $n$,并立即在纸上写下了两个序列 $A = (a_1, a_2, \dots, a_n)$ 和 $B = (b_1, b_2, \dots, b_n)$,使得 $A$ 是 $G$ 的字典序最小的拓扑排序,$B$ 是 $G$ 的字典序最大的拓扑排序。
不幸的是,现在 Bobo 忘记了原始 DAG $G$ 的样子,他手头只有这两个序列 $A$ 和 $B$。你能帮 Bobo 恢复原始图 $G$ 吗?可能存在多个符合 $A$ 和 $B$ 的图,也可能 Bobo 写下的序列有误,导致不存在合法的图。
请参考说明部分以获取下划线术语的正式定义。
输入格式
第一行包含一个整数 $n$ ($1 \le n \le 10^5$),表示两个序列的长度。
第二行包含 $n$ 个两两不同的整数 $a_1, a_2, \dots, a_n$ ($1 \le a_i \le n$),表示第一个序列 $A$。
第三行包含 $n$ 个两两不同的整数 $b_1, b_2, \dots, b_n$ ($1 \le b_i \le n$),表示第二个序列 $B$。
输出格式
如果存在满足条件的有向图 $G$,则在第一行输出 “Yes”;否则,在第一行输出 “No”。你可以以任何大小写形式输出(例如,“yEs”、“yes”、“Yes” 和 “YES” 均被视为肯定回答)。
如果你的回答是 “Yes”,请在第一行输出一个整数 $m$ ($0 \le m \le \min(n(n - 1)/2, 10^6)$)。然后在接下来的 $m$ 行中,每行输出两个整数 $u, v$ ($1 \le u, v \le n$),表示图 $G$ 中的一条有向边 $(u, v)$。你输出的图 $G$ 必须满足:它是一个有向无环图,$A$ 是 $G$ 的字典序最小的拓扑排序,$B$ 是 $G$ 的字典序最大的拓扑排序。如果存在多个解,输出其中任意一个均被视为正确。
再次注意,你输出的图必须包含不超过 $10^6$ 条边。可以证明,如果存在任何合法的图,则一定存在一个边数不超过 $10^6$ 的合法图。
样例
样例输入 1
3 1 2 3 1 2 3
样例输出 1
Yes 3 1 2 2 3 1 3
样例输入 2
3 1 2 3 3 2 1
样例输出 2
Yes 0
样例输入 3
3 3 2 1 1 2 3
样例输出 3
No
说明
在此提供题目中部分下划线术语的正式定义:
- 有向图 $G = (V, E)$ 的拓扑排序是其顶点的一种线性排序(即排列),使得对于每一条从顶点 $u$ 到顶点 $v$ 的有向边 $(u, v) \in E$,$u$ 在排序中出现在 $v$ 之前。可以证明,一个有向图当且仅当它是无环的,才至少存在一个拓扑排序。
- 对于两个长度均为 $n$ 的序列 $A = (a_1, a_2, \dots, a_n)$ 和 $B = (b_1, b_2, \dots, b_n)$,当且仅当存在某个下标 $1 \le i \le n$ 满足以下条件时,称 $A$ 的字典序小于 $B$:
- $a_i < b_i$;
- 对于所有 $j < i$,有 $a_j = b_j$。