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 Perl (5.26.1) (judge verdict: Time Limit Exceeded)

#!/usr/bin/perl
use Data::Dumper;

my ($n) = map { $_ - 0 } split(/\s+/,<STDIN>);
my @A = map { $_ - 0 } split(/\s+/,<STDIN>);
my @B = map { $_ - 0 } split(/\s+/,<STDIN>);

my %cA = ();
my %cB = ();
for(my $i=0;$i<$n;$i++){
  $cA{$A[$i]}++;
  $cB{$B[$i]}++;
}

foreach my $v ( keys %cA ){
  if( exists($cB{$v}) ){
    my $c = $cA{$v} - 0;
    if( $cB{$v} - 0 > $n - $c ){
      print "No\n"; exit(0);
    }
  }
}

my @kB = map { +[$_ - 0, $cB{$_}] } keys %cB;
my $ik = $#kB;

print "Yes\n";
my @r = (); $#r = $n - 1;
for(my $i=0;$i<$n;$i++){
  while( $kB[$ik]->[0] == $A[$i] ){
    $ik--;
    $ik = $#kB if $ik < 0;
  }
  $r[$i] = $kB[$ik]->[0];
  $kB[$ik]->[1] --;
  if( $kB[$ik]->[1] <= 0 ){
    $kB[$ik] = $kB[$#kB];
    $#kB --;
    $ik = 0 if $ik > $#kB;
  }
}
my $rr = join(' ',@r);
print "$rr\n";