Problem: 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.

Examples

Input

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


Output

Yes
2 2 3 1 1 1


Input

3
1 1 2
1 1 3


Output

No


Input

4
1 1 2 3
1 2 3 3


Output

Yes
3 3 1 2

Solution (in JAVA):

Solution:

import java.io.InputStream;
import java.io.PrintStream;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws Exception {
        solve(System.in, System.out);
    }

    static void solve(InputStream is, PrintStream os) {
        // Your code here!
        Scanner sc = new Scanner(is);
        int N = sc.nextInt();
        int A[] = new int[N];
        int B[] = new int[N];

        for (int i = 0; i < N; i++) {
            A[i] = sc.nextInt();
        }
        for (int i = 0; i < N; i++) {
            B[i] = sc.nextInt();
        }

        if(N ==1) {
            os.println("No");
            return;
        }

        int secondP = 1;

        for (int i = 0; i < N; i++) {
            if(0 < i && A[i] != A[i-1])
                secondP = 0;
            if(A[i] == B[i]){
                while(secondP < N) {
                    if(A[i] != B[secondP] && A[secondP] != B[i]) {
                        int tmp = B[i];
                        B[i] = B[secondP];
                        B[secondP] = tmp;
                        break;
                    }
                    secondP++;

                }
                if(A[i] == B[i]) {
                    os.println("No");
                    return;
                }
            }
        }
        os.println("Yes");
        for (int i = 0; i < N; i++) {
            os.print(B[i]);
            if(i < N-1)
                os.print(" ");
        }
        os.println();
    }

}