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 C (GCC 9.2.1) (judge verdict: Wrong Answer)

#include<stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	int a[n],b[n];
	int i,same=0;
	for (i=0;i<n;i++) scanf("%d",&a[i]);
	for (i=n-1;i>=0;i--) scanf("%d",&b[i]);
	int left=0, right=n-1;		
	i=0;
	//находим левую и правую границу одинаковых значений
	while ((a[i]!=b[i])&&(i<n)) i++;
	left=i;
	i=n-1;
	while ((a[i]!=b[i])&&(i>=0)) i--;
	right=i;
	printf("left=%d right=%d\n", left,right);
	//если нет пересечений то форму пролетают и сразу печатаем массив
	int k,j;
	for (i=0,j=0;(i<left)&&(left+j<=right); i++) { 
		if((b[i]!=b[left+j])&&(a[i]!=b[left+j])){
			k=b[i]; 
			b[i]=b[left+j];
			b[left+j]=k;
			j++;
		}
	}
	i=j+left;
	printf("i=%d\n",i);
//	for (i=0;i<n;i++) printf("%d ", b[i]);
	for (j=0;(i<=right)&&(right+j+1<n);j++) { 
		if ((b[i]!=b[right+j+1])&&(a[right+j+1]!=b[i])){
			k=b[i];
			b[i]=b[right+j+1];
			b[right+j+1]=k;
			i++;
		}
	}
	if (i<=right) printf("No\n");
	else {
		printf("Yes\n");
		for (i=0;i<n;i++) printf("%d ", b[i]);
	}
	return 0;
}