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 Java (OpenJDK 11.0.6) (judge verdict: Runtime Error)

import java.util.*;
public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		// 整数の入力
		int a = sc.nextInt();
		// 文字列の入力
		int[] d = new int[a];
		int[] e = new int[a];
		int[] f = new int [200000];
		for(int i = 0; i < a; i++){
			d[i] = sc.nextInt();
		} 
		for(int i = 0; i < a; i++){
			e[a - i - 1] = sc.nextInt();
		}
		boolean b = false;
		int l = 0;
		int r = 0;
		int r1 = 0;
		for(int i = 0; i < a; i++){
			if(d[i] == e[i]){
				if(d[i] == e[i - 1]){
					for(int j = i; i < a; j++){
						if(d[j] != e[j]){
							b =( d[j] != e[j - 1]);
							r1 = j - 1;
							break;
						}
					}
					if(b){
						for(int j = i - 2; j < a; j--){
							if(e[j] != e[j + 1]){
								l = j;
								break;
							}
						}
						for(int j = r1 + 2; j < a; j--){
							if(d[j] != d[j - 1]){
								r = j;
								break;
							}
						}
						if(r + r1 - l - i > a){
							System.out.println("No");
						}else{
							for(int j = 0;j < r1 - i + 1;j++){
								int g;
								g = e[l - j];
								e[l - j] = e[j + 1];
								e[j + i] = g;
							}
							System.out.println("Yes");
							for(int j = 0;j < a - 1;j++){
								System.out.print(e[j]);
							}
							System.out.println(e[a - 1]);
								
						}
					}
					else{
						for(int j = i - 2; j < a; j--){
							if(e[j] != e[j + 1]){
								l = j;
								break;
							}
						}
						for(int j = r1 + 2; j < a; j--){
							if(e[j] != e[j - 1]){
								r = j;
								break;
							}
						}
						if(r + r1 - l - i > a){
							System.out.println("No");
						}else{
							for(int j = 0;j < r1 - i + 1;j++){
								int g;
								g = e[l - j];
								e[l - j] = e[j + 1];
								e[j + i] = g;
							}
							System.out.println("Yes");
							for(int j = 0;j < a - 1;j++){
								System.out.print(e[j]);
							}
							System.out.println(e[a - 1]);
								
						}
					}
					
				}
				else{
					for(int j = i; i < a; j++){
						if(d[j] != e[j]){
							b =( d[j] != e[j - 1]);
							r1 = j - 1;
							break;
						}
					}
					if(b){
						for(int j = i - 2; j < a; j--){
							if(d[j] != d[j + 1]){
								l = j;
								break;
							}
						}
						for(int j = r1 + 2; j < a; j--){
							if(d[j] != d[j - 1]){
								r = j;
								break;
							}
						}
						if(r + r1 - l - i > a){
							System.out.println("No");
						}else{
							for(int j = 0;j < r1 - i + 1;j++){
								int g;
								g = e[l - j];
								e[l - j] = e[j + 1];
								e[j + i] = g;
							}
							System.out.println("Yes");
							for(int j = 0;j < a - 1;j++){
								System.out.print(e[j]);
							}
							System.out.println(e[a - 1]);
								
						}
					}
					else{
						for(int j = i - 2; j < a; j--){
							if(d[j] != d[j + 1]){
								l = j;
								break;
							}
						}
						for(int j = r1 + 2; j < a; j--){
							if(e[j] != e[j - 1]){
								r = j;
								break;
							}
						}
						if(r + r1 - l - i > a){
							System.out.println("No");
						}else{
							for(int j = 0;j < r1 - i + 1;j++){
								int g;
								g = e[l - j];
								e[l - j] = e[j + 1];
								e[j + i] = g;
							}
							System.out.println("Yes");
							for(int j = 0;j < a - 1;j++){
								System.out.print(e[j]);
							}
							System.out.println(e[a - 1]);
								
						}
					}
				}
				break;
			}
			
		}
      System.out.println("Yes");
							for(int j = 0;j < a - 1;j++){
								System.out.print(e[j]);
							}
							System.out.println(e[a - 1]);
		
		
	}
}