#include<iostream>
#include<vector>
#include<set>

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> inv(n);
    set<int> s;
    for(int i = 0; i < n; i++) {
        s.insert(b[i]);
    }
    if (s.size() == n) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
        cout << 1;
        for(int i = 1; i < n; i++) cout << " " << 1;
        cout << endl;
        if (s.find(a[0]) != s.end()) cout << 1;
        else cout << 2;
        for(int i = 1; i < n; i++) if (s.find(a[i]) != s.end()) cout << " " << 1;
        else cout << " " << 2;
        cout << endl;
    }
    return 0;
}

### Prompt

Your challenge is to write a CPP solution to 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<iostream>
#include<vector>
#include<set>

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> inv(n);
    set<int> s;
    for(int i = 0; i < n; i++) {
        s.insert(b[i]);
    }
    if (s.size() == n) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
        cout << 1;
        for(int i = 1; i < n; i++) cout << " " << 1;
        cout << endl;
        if (s.find(a[0]) != s.end()) cout << 1;
        else cout << 2;
        for(int i = 1; i < n; i++) if (s.find(a[i]) != s.end()) cout << " " << 1;
        else cout << " " << 2;
        cout << endl;
    }
    return 0;
}

```