Problem:

B: 写像

問題

AORイカちゃんは集合 $S = \{a_1, ..., a_N\}$ と写像 $f: S→S$を作った。$f(a_i) = b_i$ である。
集合 $S$ の任意の要素 $x$ について、$g(f(x)) = h(f(x))$ を満たす全ての写像 $g, h: S→S$ が、$g(x) = h(x)$ を満たすかどうか判定し、満たさない場合は反例を一つ構成せよ。

制約

$1 \le N \le 10^5$

$1 \le a_i,b_i \le N$

$a_i \neq a_j \ (i \neq j)$

入力は全て整数

入力:

$N$

$a_1 \cdots a_N$

$b_1 \cdots b_N$

出力:

条件を満たす場合は

Yes

条件を満たさない場合は、反例を $g(a_i) = c_i, h(a_i) = d_i$ として

No

$c_1 \cdots c_N$

$d_1 \cdots d_N$

を出力せよ。また末尾に改行を出力せよ。

サンプル

サンプル入力 1

5
1 2 3 4 5
3 4 2 5 1

サンプル出力 1

Yes

サンプル入力 2

5
1 2 3 4 5
3 4 3 5 1

サンプル出力 2

No
3 1 5 2 4
3 2 5 2 4



Sample input:
5
1 2 3 4 5
3 4 2 5 1


Sample output:
Yes

Submission status: Accepted

Solution code:
# -*- coding: utf-8 -*-
from collections import Counter
def inpl(): return list(map(int, input().split()))
N = int(input())
A = inpl()
Ai = range(N)
Ad = {a:i for i, a in enumerate(A)}
F = inpl()

C = [0]*N
for f in F:
    C[Ad[f]] += 1

if not 0 in C:
    print("Yes")
else:
    print("No")
    print(*list(map(str, A)))
    lack = C.index(0)
    ans = A[:lack] + [A[lack-1]] + A[lack+1:]
    print(*ans)