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

int main() {
    int n;
    cin >> n;
    vector<int> a(n+1), f(n+1);
    for(int i=0;i<n;i++){
        cin >> a[i];
    }
    vector<bool> used(n+1, false);
    for(int i=0;i<n;i++){
        cin >> f[i];
        used[f[i]] = true;
    }
    bool ok = true;
    for(int i=1;i<=n;i++){
        ok &= used[i];
    }
    if(ok){
        cout << "Yes" << endl;
    }
    else{
        cout << "No" << endl;
        for(int i=0;i<n;i++){
            cout << 1 << " \n"[i==n-1];
        }
        for(int i=0;i<n;i++){
            cout << (used[a[i]] ? 1 : 2) << " \n"[i==n-1];
        }
    }
    return 0;
}


### Prompt

In CPP, your task is to solve 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+1), f(n+1);
    for(int i=0;i<n;i++){
        cin >> a[i];
    }
    vector<bool> used(n+1, false);
    for(int i=0;i<n;i++){
        cin >> f[i];
        used[f[i]] = true;
    }
    bool ok = true;
    for(int i=1;i<=n;i++){
        ok &= used[i];
    }
    if(ok){
        cout << "Yes" << endl;
    }
    else{
        cout << "No" << endl;
        for(int i=0;i<n;i++){
            cout << 1 << " \n"[i==n-1];
        }
        for(int i=0;i<n;i++){
            cout << (used[a[i]] ? 1 : 2) << " \n"[i==n-1];
        }
    }
    return 0;
}


```