#include<bits/stdc++.h>
using namespace std;

int main(){
  int n;
  cin>>n;
  vector<int> a(n),b(n);
  for(int i=0;i<n;i++)cin>>a[i];
  for(int i=0;i<n;i++)cin>>b[i];
  vector<int> A,B;
  A=a,B=b;
  sort(A.begin(),A.end());
  sort(B.begin(),B.end());
  if(A==B)cout<<"Yes"<<endl;
  else {
    cout<<"No"<<endl;
    int id;
    B.push_back(n+1);
    B.push_back(0);
    sort(B.begin(),B.end());
    for(int i=0;i<=n;i++)if(B[i+1]-B[i]>1){id=B[i]+1;break;}
    
    for(int i=0;i<n;i++){
      if(i)cout<<' ';
      if(id==a[i])cout<<2;
      else cout<<1;
    }
    cout<<endl;
    for(int i=0;i<n;i++){
      if(i)cout<<' ';
      cout<<1;
    }
    cout<<endl;
  }
  return 0;
}

### Prompt

Create a solution in cpp for the following problem:

problem

AOR Ika made a set $ S = \\ {a_1, ..., a_N \\} $ and a map $ f: S → S $. $ f (a_i) = b_i $. For any element $ x $ in the set $ S $, all maps $ g, h: S → S $ satisfying $ g (f (x)) = h (f (x)) $ are $ g (x). ) = Determine if h (x) $ is satisfied, and if not, configure one counterexample.





Example

Input

5
1 2 3 4 5
3 4 2 5 1


Output

Yes

### Response

```cpp
#include<bits/stdc++.h>
using namespace std;

int main(){
  int n;
  cin>>n;
  vector<int> a(n),b(n);
  for(int i=0;i<n;i++)cin>>a[i];
  for(int i=0;i<n;i++)cin>>b[i];
  vector<int> A,B;
  A=a,B=b;
  sort(A.begin(),A.end());
  sort(B.begin(),B.end());
  if(A==B)cout<<"Yes"<<endl;
  else {
    cout<<"No"<<endl;
    int id;
    B.push_back(n+1);
    B.push_back(0);
    sort(B.begin(),B.end());
    for(int i=0;i<=n;i++)if(B[i+1]-B[i]>1){id=B[i]+1;break;}
    
    for(int i=0;i<n;i++){
      if(i)cout<<' ';
      if(id==a[i])cout<<2;
      else cout<<1;
    }
    cout<<endl;
    for(int i=0;i<n;i++){
      if(i)cout<<' ';
      cout<<1;
    }
    cout<<endl;
  }
  return 0;
}

```