Problem:
Score : 600 points

Problem Statement

Given are two sequences A and B, both of length N.
A and B are each sorted in the ascending order.
Check if it is possible to reorder the terms of B so that for each i (1 \leq i \leq N) A_i \neq B_i holds, and if it is possible, output any of the reorderings that achieve it.

Constraints

1\leq N \leq 2 \times 10^5

1\leq A_i,B_i \leq N

A and B are each sorted in the ascending order.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 \cdots A_N
B_1 B_2 \cdots B_N

Output

If there exist no reorderings that satisfy the condition, print No.

If there exists a reordering that satisfies the condition, print Yes on the first line.
After that, print a reordering of B on the second line, separating terms with a whitespace.

If there are multiple reorderings that satisfy the condition, you can print any of them.

Sample Input 1

6
1 1 1 2 2 3
1 1 1 2 2 3

Sample Output 1

Yes
2 2 3 1 1 1

Sample Input 2

3
1 1 2
1 1 3

Sample Output 2

No

Sample Input 3

4
1 1 2 3
1 2 3 3

Sample Output 3

Yes
3 3 1 2

Solution in Python (3.8.2) (judge verdict: Runtime Error)


from collections import deque

N=int(input())
*A, = map(int,input().split())
*B, = map(int,input().split())

A_c = {}
B_c = {}
for a in A:
    A_c[a] = A_c.get(a,0) + 1

for b in B:
    B_c[b] = B_c.get(b,0) + 1

for a,n in A_c.items():
    m = B_c.get(a,0)
    if n + m > N:
        print("No")
        exit()

print("Yes")

ans = B[:]

i = 0
while i < N and A[i] != ans[i]:
    i += 1

j = i+1
while j < N and A[j] != ans[j]:
    j += 1

if i == N:
    pass
elif j == N:
    1/0
    a = A[i]
    for j,b in enumerate(ans):
        if b!=a: break
    tmp = ans[j]
    ans[j] = ans[i]
    ans[i] = tmp
else:
    1/0
    while True:
        if ans[j] != A[i] and ans[i] != A[j]:
            tmp = ans[j]
            ans[j] = ans[i]
            ans[i] = tmp
            #get next i,j
            i = i+1
            while i < N and A[i] != ans[i]:
                i += 1
            j = (j+1)%N
            if i==N: break
            while j < N and A[j] != ans[j]:
                j += 1
            j %= N
            if i==j:
                a = A[i]
                for j,b in enumerate(ans):
                    if b!=a: break
                tmp = ans[j]
                ans[j] = ans[i]
                ans[i] = tmp
                break
            continue
        else:
            j = (j+1)%N
    pass

print(*ans)