Problem:
B: 写像
問題
AORイカちゃんは集合 $S = \{a_1, ..., a_N\}$ と写像 $f: S→S$を作った。$f(a_i) = b_i$ である。
集合 $S$ の任意の要素 $x$ について、$g(f(x)) = h(f(x))$ を満たす全ての写像 $g, h: S→S$ が、$g(x) = h(x)$ を満たすかどうか判定し、満たさない場合は反例を一つ構成せよ。
制約
$1 \le N \le 10^5$
$1 \le a_i,b_i \le N$
$a_i \neq a_j \ (i \neq j)$
入力は全て整数
入力:
$N$
$a_1 \cdots a_N$
$b_1 \cdots b_N$
出力:
条件を満たす場合は
Yes
条件を満たさない場合は、反例を $g(a_i) = c_i, h(a_i) = d_i$ として
No
$c_1 \cdots c_N$
$d_1 \cdots d_N$
を出力せよ。また末尾に改行を出力せよ。
サンプル
サンプル入力 1
5
1 2 3 4 5
3 4 2 5 1
サンプル出力 1
Yes
サンプル入力 2
5
1 2 3 4 5
3 4 3 5 1
サンプル出力 2
No
3 1 5 2 4
3 2 5 2 4

Submitted solutions:

code_snippet: #pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;

int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    vector<int> a(n), b(n);
    vector<int> cnt(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        a[i] -= 1;
    }
    for (int i = 0; i < n; ++i) {
        cin >> b[i];
        cnt[b[i] - 1] += 1;
    }
    int uo = -1;
    for (int i = 0; i < n; ++i) {
        if (cnt[i] == 0) uo = i;
    }
    if (uo == -1) {
        cout << "Yes" << endl;
        return 0;
    }
    vector<int> res(n, 1), res2(n, 1);
    res2[uo] = 2;
    cout << "No" << endl;
    for (int i = 0; i < n; ++i) {
        if (i) cout << " ";
        cout << res[a[i]];
    }
    cout << endl;
    for (int i = 0; i < n; ++i) {
        if (i) cout << " ";
        cout << res2[a[i]];
    }
    cout << endl;
}
accuracy: 1
time_ms: 10
memory_kb: 5096
final_rank: 4

code_snippet: //#define _GLIBCXX_DEBUG
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
//using uLL = unsigned __int128;
using str = string;
template <typename T> 
using pqg = priority_queue<T, vector<T>, greater<T>>;
template <typename T>
using pq = priority_queue<T>;
template <typename T>
using vec = vector<T>;
using pll = pair<long long, long long>;
using pii = pair<int, int>;
using vvvvl = vector<vector<vector<vector<ll>>>>;
using vvvi = vector<vector<vector<int>>>;
using vvvl = vector<vector<vector<ll>>>;
using vvvc = vector<vector<vector<char>>>;
using vvvd = vector<vector<vector<double>>>;
using vvi = vector<vector<int>>;
using vvl = vector<vector<ll>>;
using vvc = vector<vector<char>>;
using vvp = vector<vector<pair<ll, ll>>>;
using vvb = vector<vector<bool>>;
using vvd = vector<vector<double>>;
using vp = vector<pair<ll, ll>>;
using vi = vector<int>;
using vl = vector<ll>;
using vu = vector<unsigned long long>;
using vc = vector<char>;
using vb = vector<bool>;
using vd = vector<double>;
#define vvvm  vector<vector<vector<mint>>>
#define vvm  vector<vector<mint>>
#define vm  vector<mint>
template <typename T1, typename T2>
using umap = unordered_map<T1, T2>;
template <typename T>
using uset = unordered_set<T>;
#define rep(i, s, f) for(long long i = s; i <= f; i++)
#define rep1(i, s, f) for(long long i = s; i <= f; i++)
#define per(i, s, f) for(long long i = s; i >= f; i--)
#define per1(i, s, f) for(long long i = s; i >= f; i--)
#define eb(a) emplace_back(a)
#define pb(a) push_back(a)
#define all0(x) (x).begin() ,(x).end()
#define all(x) (x).begin() + 1, (x).end()
#define ins(x, l, r) (l <= x && x <= r)
#define ENDL '\n'
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//これが本当の組み込み関数ってね（笑）
template <typename T>
int LB(vector<T> &A, T x) {
    return lower_bound(A.begin(), A.end(), x) - A.begin();
}

template <typename T>
int UB(vector<T> &A, T x) {
    return upper_bound(A.begin(), A.end(), x) - A.begin();
}
template <typename T>
void UNIQUE(vector<T> &A, int indexed) {
    sort(A.begin() + indexed, A.end());
    A.erase(unique(A.begin() + indexed, A.end()), A.end());
}

template <typename T>
vector<T> erase(vector<T>& A, T& x) {
	vector<T> res;
	for(T a : A) if(a != x) res.emplace_back(a);
	return res;
}
string split(string& S, int l, int r) {
	return S.substr(l, r - l + 1);
}

int msb(long long a) {
    if(a == 0) return -1;
    return 64 - int(__builtin_clzll(a));
}
template<typename T = long long>
void chmin(T &a, T b) {
    a = min(a, b);
}
template<typename T = long long>
void chmax(T &a, T b) {
    a = max(a, b);
}
//////////////////////////////////////////////////////////////////////
//数学系
///////////////////////////////////////////////////////////////////////
ll extgcd (ll a, ll b,  ll &x, ll &y) {
    if(b == 0) { x = 1;y = 0;return a;}
    ll d = extgcd(b, a%b, y, x);
    y -= a/b * x;
    return d;
}
template <typename T>
T ceil__(T a, T b) {
    assert(b != 0);
    if(a % b == 0) return a / b;
    if((a <= 0 && b < 0) || (a >= 0 && b > 0)) return a/b + 1;
    else return a / b;
}
template <typename T>
T floor__(T a, T b) {
    assert(b != 0);
    if(a % b == 0) return a / b;
    if((a <= 0 && b < 0) || (a >= 0 && b > 0)) return a/b;
    else return a/b - 1;
}
ll modpow(ll x, ll y, ll mod) {
    if(x > mod) x %= mod;
    if(y == 0) return 1;
    ll res = modpow(x, y >> 1, mod);
    res = res * res % mod;
    if(y & 1) res *= x, res %= mod;
    return res;
}
ll sqrt__(ll a) {
    ll l = 0;
    ll r = 3037000499LL;
    while(l < r) {
        ll mid = (l + r + 1) / 2;
        if(mid * mid <= a) l = mid;
        else r = mid - 1;
    }
    return l;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//グローバル変数を置くところ
//#pragma GCC optimize("O3")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize "trapv" //お祈り。変数同士の演算でのみ感知。代入や、 a *= 10000 では感知しない。
const ll big = 1001001001;
const ll BIG = 1001001001001001001LL;
const double pi = 3.141592653589793;
vl dx{0, 1, 0, -1, 0, 1, 1, -1, -1};  // 座標平面において、(番兵) → ↓ ← ↑  ※ 右から時計回り 注 : グリッド or 座標で上下は反転する。
vl dy{0, 0, -1, 0, 1, 1, -1, -1, 1};
//const ll mod = 1000000007;
//const ll mod = 998244353;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/*


*/

void solve() {
	int N;
	cin >> N;
	vl A(N+1) , B(N+1);
	rep(i,1,N) cin >> A[i];
	set<ll> as;
	rep(i,1,N) as.insert(A[i]);
	rep(i,1,N) {
		cin >> B[i];
		//as.erase(B[i])
	}
	rep(i,1,N) {
		as.erase(B[A[i]]);
	}

	if(N==1) {//移すしかない。
		cout << "Yes" << endl;
		return;
	}

	if(as.size()>=1) {
		cout << "No" << endl;
		vl C(N+1), D(N+1);
		rep(i,1,N) {
			if(A[i] == *begin(as)) {//存在しない。
			    //C[A[i]] = 1;
				//D[A[i]] = 2;
				C[i] = 1;
				D[i] = 2;
			}
			else {
				//C[A[i]] = 1;
				//D[A[i]] = 1;
				C[i] = 1;
				D[i] = 1;
			}
		}

		rep(i,1,N-1) {
			cout << C[i] << " ";
		}
		cout << C[N];
		cout << endl;
		rep(i,1,N-1) {
			cout << D[i] << " ";
		}
		cout << D[N];
		cout << endl;
		return;
		
	}
	else {
		cout << "Yes" << endl;
	}



	
    

    
    

}



int main() {
    ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    cout << fixed << setprecision(15);
    ll T = 1;
    //cin >> T;
    rep(i, 1, T) {
        solve();
    }
    return 0;
}



/*

- WA : 違法な読み替えをしていないか・違法な操作をしていないか
・実装が重そうな時は確認する 一度飛ばしても良い
・嘘を吐いていないかの他に、違法な操作をしていないかもチェックする。特にふわっとした操作は危ない
  -区間をちょっと伸ばす←端の時、伸ばす余地はあるか
  -選択肢のうち、どれでも良いから消す←本当にどれでも良いか 場合分けを挟んでないか そもそも消せる要素は存在するか
  -適当に割り振る←順番を区別する必要があるかもしれない
・答えの候補にはならないからと言って最初から無かったことにすると、その要素による制約も無視してしまう事がある。
・dpで途中までは辻褄が合っても、最後に分岐するので纏めてはいけない遷移というのがある



[整理パート] とりあえずやること
・必ずやらなければいけない操作は、順番が許すなら最初にやる
・確実にかかる費用があるなら、その費用は確定した上で他にかかる費用を最小化する。
・要素と制約をグラフで表してみる
  -関係がある要素間を辺で結び、制約上独立な要素集合ごとに見る
    ・二部グラフ > functional graph 出次数1なら functional graphの方が見えやすいかも
  -遷移を図で表現し、使いまわしたりできないか見る
  -グラフの2頂点に注目するなら、その2頂点を引っ張る or 2頂点のlcaに注目する。
・制約を「全ての要素についてoo ⇔ (1<=i<=N)で、iについてoo」といったように、独立なものに言い換えた方がやりやすいこともある
  -特に、bit演算が絡む時は、整数をbit毎に見る事で1つの制約を扱いやすい制約30個に分解できる(bit演算以外の時は、この30個が複雑に絡み合う可能性が高くなる)

・スコア・問題を数式で表現する。多少複雑そうでも、試みるぐらいはする。
  -複雑そうだし、役に立たないのでは？という直感はゴミ
  
・操作を制約に合わせて言い換える・制約を操作に合わせて言い換える。言い換えない方が良いことは多々ある。
  -全てがの要素が等しい⇔差分列が全て0
  -階差数列⇔差分列の要素の値が等しい
  -配列の、まとまった領域に対するよく分からない操作は(1)何ができるか調べる(2)何が作れるのか調べる(3)差分列に注目(4)modMごとに分けてみる(5)累積和列に注目

・よくわからないもの・扱いづらいものを言い換える。
  -特に、慣れ親しんだ制約も、問題設定によってより扱いやすい形に言い換えられるかもしれない（例：グラフが連結)
・強い制約は、数え上げ・最適化・クエリ・ゲーム共に良い性質を生みやすいので注目する
  -制約に具体的な数値が登場している←適当に解をいじると何となく性質が見えることが多い
  -強い言葉を使われた・補集合が単純なものを提示されたら、ほう助を疑う。 
     -「値がxに一致しない」
     -「1つ以上存在する・1つも存在しない」
     -「1回以上発生する・1度も発生しない」
     

[観察]  様々な解法も、実際試さないとそれで解けると分からないことは多い。
[]それらしい筋を書いておく → 一本道でもない限り、それぞれの解法をある程度並行して考える。 また、困ったら全部の筋を試す。
  -特に、最初に建てた方針は等しく皆大事にする。1つにのめり込むことのない様に。
[]１5分毎ぐらいに進捗を確認する←考察が進んでいない・闇雲な無限整理編に入っていたら、その筋はやばい可能性が高いので他の筋があれば変える。あるいは飛ばす。
	-数学的な式を満たす値は、グラフを書いたり列挙をすることで性質が見えることもある。
  -数学的な求値は、意味づけによる計算量削減が難しいが、漸化式的な発想が役に立つことが多い。
    ・combinationが入るΣ
	-満たすものが少なそうな制約は、同時に探索空間も小さくできるかも
  -問題設定によって、探索空間そのものが狭くなっている場合がある。


[やる事ない]
・取れる選択肢がある限り全て試す。一つに固執せず、横断的に見る。
・過去の問題の手法を当てはめてみる。
・やばい見た目してても、スコアなどを数式で表すことを試みてみる
  -貪欲や何かが見えるかも
・逆に、何ができる・成り立っているなら問題を解けるかを考える。それが実際できることを疑う。
  -大胆予想が正しい
    ・大胆予想：特殊ケース（c=0等)の時の答えと、一般のケースの答えが一致する
    ・大胆予想：必要十分条件がooである


[やる事ない：数え上げ周り] どれかに当てはまれば、解ける。そして、だいたいどれか。
[0]状態を保ちながら、順々に探索していける [1]探索空間そのものに特徴がある [2]解に特徴がある [3]探索順を変える [4]全探索の対象を全て試す [5]主客逆転 [6]昔計算した結果を再利用できる
  -[0]持つべき情報...「その状態から後にどの様に分岐すか」を求めるのに必要な情報 
  -[3]でかい方から、深い方から、DAGで先端になっている・或いは葉になっている所から、全てを逆に言い換えて時系列的に後ろから ... で、構造が単純になることがある。
    -特に,左から決定していく探索について:「要素ごとに寄与が分解できない」という時も、新たに要素が増えることによる"全体の寄与の変化"が高速に計算できれば解ける。主客転倒と近いかもしれない。
  -[4]固定するものの数が多くても、何かを固定した時の場合の和が綺麗に表せれば、固定するものを纏めて計算できる。
  -[5]演算が+やxorなどの分解して良いやつの時


[やる事ない：最適化周り]
[0]順番を保ちながら、順々に探索していける [1]探索空間そのものに特徴がある [2]解の形を絞れる [3]答えを決め打って判定問題 [4]最悪ケース・最良ケースを纏めると、スコアに関わる本質部分がわかって、場合分けが進む/上界・下界が絞れる。 
[5]条件を満たす為の操作・構築として、具体的な操作考を考え、改善していく [6]探索順を変える [7]探索の軸を変える [8]特殊ケースの解方が一般ケースでも最適 [9]自由度を無視しても最適解が構築できる
  -[0]特に、操作が順番に寄らない時は選択肢としてあり得る。順番に寄る時は難しいかもしれない。
  -[0]条件を満たしながら最適化という時、条件が簡潔・存在しないならばそれに至るまでにありうる状態を全て状態として持つdpが可能かもしれない。
    -例:連続とは限らない部分文字列としてabcを含まない/含む様にする時の最小操作回数
  -[3]答えに限らず、何かが定まれば貪欲がありそうという時に有効（目標とする値・何かの上限...)
  -[4]最悪・最良の疑いがある解を見つけたら、最悪である必要条件を考えて、最悪ケースを特徴づけする。その後、２番目に最悪ケースについて同じことをしたり、他のケースに含まれる部分的な最悪ケースが支配的になっていることを考える。
  -[5]ooを満たす為の「最小の操作回数」や「コストがC以下の操作」を聞かれた際、「ooを満たす様な具体的な操作・構築」を考える事になる。
    -初期状態が満たす可能性があるなら、それを省く。条件が"ooでない"、の時、初期状態がooであるという制約がつく等嬉しい。
    -同じ条件を満たす様な操作・構築の中では、自由度がより高いのが良い。
    -後から調整可能なのは後回し。支配的なのは出来るだけ最初に。
    -やってはいけない事を禁止。何ができるか。
    -最小化等を考えずに、ともかく与えられた操作・制約・上限コストでどの様な解が作れるか。([1])
    -この構築で可能か？を探る際は、最悪ケースで実験する。穴がある解を未然に防ぐ。
    -それっぽい操作を考えたが、できない事がある→できる場合・できない場合を特徴づける。
      -出来ない条件を探る過程で、本質的な必要十分に辿り着くかもしれない。 例：木の深さの偶奇が関わる→二部グラフにした時... , 二部グラフにできない時...
      -より条件を絞った状態で考えられる。
  -[6]でかい方から、深い方から、DAGで先端になっている・或いは葉になっている所から、全てを逆に言い換えて時系列的に後ろから ... で、貪欲が見えたり構造が単純になることがある。
  -[7]今給油するか？では無く、「ここで必要なガソリンはどこで給油するか？
・「最適な操作順」や「操作順に関する貪欲」なんてわからないという時、一旦引いて「ooの分のコストは確実にかかる」等を整理すると、手順を陽に明かさずとも最適な答えがわかることはある。
・bit演算がメインなら、bitごとにみる。特に、msbに注目する。（数が少ないので必要条件になりやすい・大きくする時の貪欲はとにかく上を立てる)
・関係をグラフに起こしてあると気づきやすいこともある
・スコアを数学的な式で表すことを試みたか
・差分を計算するなら、最初から差分計算の処理のみで答えを計算した方が良い。最初を愚直でやると情報をロストする可能性があるし、愚直の枠組みに囚われる事もある。
・文字列周りのアルゴリズムは、昔の結果を利用して高速に計算する方法を述べているのであって、「回文がminになるoo」を求めるのには役に立たない？

[やる事ない：クエリ]
[1]1回のクエリが高速に計算できる  [2]最終的に求める値がそれぞれ高速に計算できる [3]差分が計算できる [4]最終的に求める値が並列に計算できる 
  -[1]確かに1回のクエリが解けた事を確認してから更新を考える事  解ける前から「直観的に必要そうな情報」の更新を考えたりしない (制約を元に、計算量をメタ読みするのは良い)

[やる事ない：操作列の長いシュミレーション周り]
[1]周期性がある  [2]結果を基準に見る, [3]再帰的に計算できる [4]時間のかかる操作の回数が少ない
  -[2]...操作を順々にしていくのでは無く、求めるものを直接求めにいく
   -「(削除の)シュミレーションを高速にやる」と「要素が最後まで残る必要条件をみる」
  -[1],[3] 綺麗な構造になっていれば
  -[4]...シュミレーションを実行するのに必要な計算を列挙する。重いやつのうち、実際にやらなければならない回数が実は少ないなど。



[高速化ネタ]
・lcmを含む式はgcdの式にする
・操作のどれを1段階とするかは自由に決めて良い(DPと同じ)。特に、操作をさらに細かくすることで1回を軽くすることもある。
・dpやシュミレーションで、段階によって遷移(計算)の本数が変化する時、貰う・配るを両立することでO(N√N)  注意：貰っても配っても良い時のみ。具体的に、期待値ではダメ。
・「全探索する軸が違うのに計算量同じな解法のペアがある」 と 「それぞれに得意・貪欲によりさらに計算量を減らせる範囲だけを計算させることでO(N√N)
 -自由度が2つ以上あるときなど 例：「数列が等差数列である ... 「一つ、数列の値を指定する」と「公差を指定する」
・「明らかに調べなくて良い」「これだけは別途楽に計算できる」事を事前に省いた結果、実は計算量を劇的に減らすことがある。主に最適化の文脈。
  -最悪ケースを考えると気づくかもしれない
・答えの個数・値が小さいなら、探索範囲をせばせて良いかも
・「bit/素因数ごとに分ける」と「分けずにまとめて計算する」

*/
accuracy: 1
time_ms: 50
memory_kb: 11032
final_rank: 17

code_snippet: #include <bits/stdc++.h>
// #include <atcoder/all>
// using namespace atcoder;
using namespace std;
typedef long long ll;
typedef long double ld; 
typedef unsigned long long ull;
typedef pair<ll,ll> pll;
// using mint = modint998244353;
// using mint = modint1000000007;
ll mod = 998244353;
// ll mod = 1000000007;
ll inf = 2e18;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep1(i, n) for (int i = 1; i <= (int)(n); i++)
#define all(a) (a).begin(), (a).end()
template<class T> inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}
ll seen[100009];
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr);
    ll n;
    cin>>n;
    vector<ll> b(n),a(n),g(n),h(n);
    rep(i,n)cin>>a[i];
    rep(i,n)cin>>b[i];
    rep(i,n){
        seen[b[i]]++;
    }
    ll ze = -1;
    ll tw = -1;
    rep1(i,n){
        if(seen[i] >= 2){
            tw = i;
        }
        if(seen[i] == 0){
            ze = i;
        }
    }
    // cout << ze << " " << tw << endl;
    if(ze == -1){
        cout << "Yes\n";
        return 0;
    }
    cout << "No\n";
    rep(i,n){
        if(a[i] == ze){
            h[i] = 1;
            g[i] = 2;
        }
        else {
            h[i] = 1;
            g[i] = 1;
        }
    }
    rep(i,n){
        if(i != n-1)cout << h[i] << " ";
        else cout << h[i];
    }
    cout << endl;
    rep(i,n){
        if(i != n-1)cout << g[i] << " ";
        else cout << g[i];
    }
    cout << endl;
}
accuracy: 1
time_ms: 10
memory_kb: 7044
final_rank: 6

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

typedef long long ll;

#define rep(i, s, n) for (int i = (int)(s); i < (int)(n); i++)
#define rrep(i, s, n) for (int i = (int)(n)-1; i >= (int)(s); i--)

template <typename T> bool chmin(T &a, const T &b) {
	if (a <= b) return false;
	a = b;
	return true;
}

template <typename T> bool chmax(T &a, const T &b) {
	if (a >= b) return false;
	a = b;
	return true;
}

template <typename T> T max(vector<T> &a){
	assert(!a.empty());
	T ret = a[0];
	for (int i=0; i<(int)a.size(); i++) chmax(ret, a[i]);
	return ret;
}

template <typename T> T min(vector<T> &a){
	assert(!a.empty());
	T ret = a[0];
	for (int i=0; i<(int)a.size(); i++) chmin(ret, a[i]);
	return ret;
}

template <typename T> T sum(vector<T> &a){
	T ret = 0;
	for (int i=0; i<(int)a.size(); i++) ret += a[i];
	return ret;
}

int main(){
	int n; cin >> n;
	vector<int> a(n), b(n);
	rep(i,0,n){
		cin >> a[i];
		a[i]--;
	}
	vector<int> cnt(n);
	rep(i,0,n){
		cin >> b[i];
		b[i]--;
		cnt[b[i]]++;
	}
	int t = -1;
	rep(i,0,n){
		if (cnt[i] == 0){
			t = i;
		}
	}
	if (t == -1){
		cout << "Yes\n";
		return 0;
	}

	vector<int> c(n,1);
	vector<int> d(n,1);
	d[t] = 2;
	cout << "No\n";
	rep(i,0,n){
		cout << c[a[i]];
		if (i == n-1) cout << '\n';
		else cout << ' ';
	}
	rep(i,0,n){
		cout << d[a[i]];
		if (i == n-1) cout << '\n';
		else cout << ' ';
	}
	



	
}
accuracy: 1
time_ms: 40
memory_kb: 4952
final_rank: 10

code_snippet: #include <iostream>
#include <vector>
using namespace std;
int main(void){
    // Your code here!
    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> cnt(N+1);
    for (int i=0;i<N;i++) {
        cnt[B[i]]++;
    }
    
    bool check = true;
    vector<int> C(N), D(N);
    for (int i=0;i<N;i++) {
        if (cnt[A[i]]==0) {
            check = false;
            C[i] = 1;
            D[i] = 2;
        }
        else {
            C[i] = 1;
            D[i] = 1;
        }
    }
    
    if (check) cout << "Yes" << endl;
    else {
        cout << "No" << endl;
        for (int i=0;i<N;i++) cout << C[i] << (i==N-1?'\n':' ');
        for (int i=0;i<N;i++) cout << D[i] << (i==N-1?'\n':' ');
    }
    return 0;
}
accuracy: 1
time_ms: 40
memory_kb: 4684
final_rank: 8

code_snippet: // author: hotman78
// date: 2024/04/12-18:16:31

// --- begin raw code -----------------
// #include"cpplib/util/template.hpp"
// 
// void solve(){
//     lint n;
//     cin>>n;
//     vec a(n),b(n);
//     rep(i,n)cin>>a[i];
//     rep(i,n)cin>>b[i];
//     rep(i,n){
//         a[i]--;b[i]--;
//     }
//     set<lint>s;
//     rep(i,n){
//         s.emplace(i);
//     }
//     rep(i,n){
//         if(s.count(b[i]))s.erase(b[i]);
//     }
//     if(s.empty()){
//         cout<<"Yes"<<endl;
//         return;
//     }
//     lint k=*s.begin();
//     vec c(n),d(n),e(n);
//     rep(i,n){
//         c[i]=a[i];
//         d[i]=a[i];
//     }
//     rep(i,n){
//         if(a[i]==k){
//             d[i]=(d[i]+1)%n;
//         }
//     }
//     rep(i,n){
//         c[i]++;
//         d[i]++;
//     }
//     cout<<"No"<<endl;
//     output(c);
//     output(d);
// }
// 
// int main(){
//     solve();
// }
// --- end raw code -----------------

#line 2 "cpplib/util/template.hpp"
#ifdef LOCAL
#define _GLIBCXX_DEBUG
#endif
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2")
#include <bits/stdc++.h>
using namespace std;
#line 1 "cpplib/util/ioutil.hpp"
// template <class Head,class... Args>
// std::ostream& output(std::ostream& out,const Head& head,const Args&... args){
//     out>>head;
//     return output(head,args...);
// }
// template <class Head>
// std::ostream& output(std::ostream& out,const Head& head){
//     out>>head;
//     return out;
// }

template <typename T, typename E>
std::ostream &operator<<(std::ostream &out, std::pair<T, E> v) {
    out << "(" << v.first << "," << v.second << ")";
    return out;
}

// template <class... Args>
// ostream& operator<<(ostream& out,std::tuple<Args...>v){
//     std::apply(output,v);
//     return out;
// }
#line 11 "cpplib/util/template.hpp"
struct __INIT__ {
    __INIT__() {
        cin.tie(0);
        ios::sync_with_stdio(false);
        cout << fixed << setprecision(15);
    }
} __INIT__;
typedef long long lint;
constexpr long long INF = 1LL << 60;
constexpr int IINF = 1 << 30;
constexpr double EPS = 1e-10;
#ifndef REACTIVE
#define endl '\n';
#endif
typedef vector<lint> vec;
typedef vector<vector<lint>> mat;
typedef vector<vector<vector<lint>>> mat3;
typedef vector<string> svec;
typedef vector<vector<string>> smat;
template <typename T> using V = vector<T>;
template <typename T> using VV = V<V<T>>;
#define output(t)                                                              \
    {                                                                          \
        bool f = 0;                                                            \
        for (auto val : (t)) {                                                 \
            cout << (f ? " " : "") << val;                                     \
            f = 1;                                                             \
        }                                                                      \
        cout << endl;                                                          \
    }
#define output2(t)                                                             \
    {                                                                          \
        for (auto i : t)                                                       \
            output(i);                                                         \
    }
#define debug(t)                                                               \
    {                                                                          \
        bool f = 0;                                                            \
        for (auto i : t) {                                                     \
            cerr << (f ? " " : "") << i;                                       \
            f = 1;                                                             \
        }                                                                      \
        cerr << endl;                                                          \
    }
#define debug2(t)                                                              \
    {                                                                          \
        for (auto i : t)                                                       \
            debug(i);                                                          \
    }
#define loop(n) for (long long _ = 0; _ < (long long)(n); ++_)
#define _overload4(_1, _2, _3, _4, name, ...) name
#define __rep(i, a) repi(i, 0, a, 1)
#define _rep(i, a, b) repi(i, a, b, 1)
#define repi(i, a, b, c)                                                       \
    for (long long i = (long long)(a); i < (long long)(b); i += c)
#define rep(...) _overload4(__VA_ARGS__, repi, _rep, __rep)(__VA_ARGS__)
#define _overload3_rev(_1, _2, _3, name, ...) name
#define _rep_rev(i, a) repi_rev(i, 0, a)
#define repi_rev(i, a, b)                                                      \
    for (long long i = (long long)(b)-1; i >= (long long)(a); --i)
#define rrep(...) _overload3_rev(__VA_ARGS__, repi_rev, _rep_rev)(__VA_ARGS__)

#define all(n) begin(n), end(n)
template <typename T, typename E> bool chmin(T &s, const E &t) {
    bool res = s > t;
    s = min<T>(s, t);
    return res;
}
template <typename T, typename E> bool chmax(T &s, const E &t) {
    bool res = s < t;
    s = max<T>(s, t);
    return res;
}
const vector<lint> dx = {1, 0, -1, 0, 1, 1, -1, -1};
const vector<lint> dy = {0, 1, 0, -1, 1, -1, 1, -1};
#define SUM(v) accumulate(all(v), 0LL)
#if __cplusplus >= 201703L
template <typename T, typename... Args>
auto make_vector(T x, int arg, Args... args) {
    if constexpr (sizeof...(args) == 0)
        return vector<T>(arg, x);
    else
        return vector(arg, make_vector<T>(x, args...));
}
#endif
#define bit(n, a) ((n >> a) & 1)
#define extrep(v, ...) for (auto v : make_mat_impl({__VA_ARGS__}))
vector<vector<long long>> make_mat_impl(vector<long long> v) {
    if (v.empty())
        return vector<vector<long long>>(1, vector<long long>());
    long long n = v.back();
    v.pop_back();
    vector<vector<long long>> ret;
    vector<vector<long long>> tmp = make_mat_impl(v);
    for (auto e : tmp)
        for (long long i = 0; i < n; ++i) {
            ret.push_back(e);
            ret.back().push_back(i);
        }
    return ret;
}
using graph = vector<vector<int>>;
template <typename T> using graph_w = vector<vector<pair<int, T>>>;

#if __cplusplus >= 201703L
constexpr inline long long powll(long long a, long long b) {
    long long res = 1;
    while (b--)
        res *= a;
    return res;
}
#endif

template <typename T, typename E>
pair<T, E> &operator+=(pair<T, E> &s, const pair<T, E> &t) {
    s.first += t.first;
    s.second += t.second;
    return s;
}
template <typename T, typename E>
pair<T, E> &operator-=(pair<T, E> &s, const pair<T, E> &t) {
    s.first -= t.first;
    s.second -= t.second;
    return s;
}
template <typename T, typename E>
pair<T, E> operator+(const pair<T, E> &s, const pair<T, E> &t) {
    auto res = s;
    return res += t;
}
template <typename T, typename E>
pair<T, E> operator-(const pair<T, E> &s, const pair<T, E> &t) {
    auto res = s;
    return res -= t;
}
#define BEGIN_STACK_EXTEND(size)                                               \
    void *stack_extend_memory_ = malloc(size);                                 \
    void *stack_extend_origin_memory_;                                         \
    char *stack_extend_dummy_memory_ = (char *)alloca(                         \
        (1 + (int)(((long long)stack_extend_memory_) & 127)) * 16);            \
    *stack_extend_dummy_memory_ = 0;                                           \
    asm volatile("mov %%rsp, %%rbx\nmov %%rax, %%rsp"                          \
                 : "=b"(stack_extend_origin_memory_)                           \
                 : "a"((char *)stack_extend_memory_ + (size)-1024));
#define END_STACK_EXTEND                                                       \
    asm volatile("mov %%rax, %%rsp" ::"a"(stack_extend_origin_memory_));       \
    free(stack_extend_memory_);
int floor_pow(int n) { return n ? 31 - __builtin_clz(n) : 0; }
#line 2 "main.cpp"

void solve() {
    lint n;
    cin >> n;
    vec a(n), b(n);
    rep(i, n) cin >> a[i];
    rep(i, n) cin >> b[i];
    rep(i, n) {
        a[i]--;
        b[i]--;
    }
    set<lint> s;
    rep(i, n) { s.emplace(i); }
    rep(i, n) {
        if (s.count(b[i]))
            s.erase(b[i]);
    }
    if (s.empty()) {
        cout << "Yes" << endl;
        return;
    }
    lint k = *s.begin();
    vec c(n), d(n), e(n);
    rep(i, n) {
        c[i] = a[i];
        d[i] = a[i];
    }
    rep(i, n) {
        if (a[i] == k) {
            d[i] = (d[i] + 1) % n;
        }
    }
    rep(i, n) {
        c[i]++;
        d[i]++;
    }
    cout << "No" << endl;
    output(c);
    output(d);
}

int main() { solve(); }
accuracy: 1
time_ms: 50
memory_kb: 11828
final_rank: 18

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

#define int long long
#define ll long long

#define rep(i, n) for (ll i = 0; i < n; ++i)
#define all(v) begin(v), end(v)
// #define BIT(n) (1LL << (n))
#define MAX(type) numeric_limits<type>::max()
#define MIN(type) numeric_limits<type>::min()
#define yes cout << "Yes" << endl
#define no cout << "No" << endl
#define pb push_back
#define mp make_pair
#define fir first
#define sec second

signed main() {
  int N;
  cin >> N;
  vector<int> A(N), B(N);
  rep(i, N) cin >> A[i];
  rep(i, N) cin >> B[i];
  set<int> s;
  rep(i, N) s.insert(A[i]);
  rep(i, N) {
    s.erase(B[i]);
  }
  if(s.empty() ) cout << "Yes" << endl;
  else {
    cout << "No" << endl;
    vector<int> ans(N, A[0]), ans2(N, A[0]);
    rep(i, N) {
      if(s.count(A[i])) {
        ans2[i] = A[1];
      }
    }
    rep(i, N) {
      cout << ans[i];
      if(i != N-1) cout << " ";
    }
    cout << endl;
    rep(i, N) {
      cout << ans2[i];
      if(i != N-1) cout << " ";
    }
    cout << endl;
  }


}
accuracy: 1
time_ms: 90
memory_kb: 11004
final_rank: 19

code_snippet: #include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define FOR(i, l, r) for(ll i = l; i < r; i++)
#define rep(i, n) FOR(i, 0, n)
#define FORR(i, l, r) for(ll i = r - 1; i >= l; i--)
#define ALL(ar) begin(ar), end(ar)

template <typename T1, typename T2>
inline bool chmax(T1 &a, T2 b) {
    return a < b && (a = b, true);
}
template <typename T1, typename T2>
inline bool chmin(T1 &a, T2 b) {
    return a > b && (a = b, true);
}
template <typename T1, typename T2>
istream &operator>>(istream &is, pair<T1, T2> &p) {
    is >> p.first >> p.second;
    return is;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
    os << p.first << ' ' << p.second;
    return os;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
    for(T &x : v) is >> x;
    return is;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
    for(size_t i = 0; i < v.size(); i++) os << (i ? " " : "") << v[i];
    return os;
}
//-------------------------------------------------

void solve() {
    int n;
    cin >> n;
    vector<int> a(n), b(n);
    cin >> a >> b;

    vector<int> cnt(n + 1);
    rep(i, n) cnt[b[i]]++;

    FOR(i, 1, n + 1) {
        if(cnt[i] == 0) {
            cout << "No" << endl;
            rep(j, n) cout << 1 << " \n"[j + 1 == n];
            rep(j, n) cout << (i == a[j] ? 2 : 1) << " \n"[j + 1 == n];
            return;
        }
    }
    cout << "Yes" << endl;
}

int main() {
    int t = 1;
    // cin >> t;
    while(t--) solve();
}
accuracy: 1
time_ms: 40
memory_kb: 4260
final_rank: 7

code_snippet: // https://codeforces.com/blog/entry/96344
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")

#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using u32 = unsigned int;
using u64 = unsigned long long;

template<typename T>
bool chmax(T& a, const T& b) {
    bool res = a < b;
    a = max(a, b);
    return res;
}
template<typename T>
bool chmin(T& a, const T& b){
    bool res = a > b;
    a = min(a, b);
    return res;
}

typedef vector<long long> vl;
typedef pair<ll,ll> pll;
typedef vector<pair<ll, ll>> vll;
typedef vector<int> vi;
typedef vector<pair<int,int>> vii;
typedef pair<int,int> pii;

const int inf = 1000000009;
const ll linf = 4000000000000000009;


// https://trap.jp/post/1224/
template<class... T>
void input(T&... a){
    (cin >> ... >> a);
}

void print(){
    cout << '\n';
}
template<class T, class... Ts>
void print(const T& a, const Ts&... b){
    cout << a;
    (cout << ... << (cout << ' ', b));
    cout << '\n';
}

#define rep1(a)          for(int i = 0; i < a; i++)
#define rep2(i, a)       for(int i = 0; i < a; i++)
#define rep3(i, a, b)    for(int i = a; i < b; i++)
#define rep4(i, a, b, c) for(int i = a; i < b; i += c)
#define overload4(a, b, c, d, e, ...) e
#define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)


#define eb emplace_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
//---------------------------------


void solve(){
    int n; cin >> n;
    vi a(n), f(n);
    rep(i, n) cin >> a[i];
    rep(i, n) cin >> f[i];
    set<int> s;
    rep(i, n) s.insert(f[i]);
    if(s.size() == n){
        cout << "Yes\n";
    } else {
        cout << "No\n";
        vi c(n), d(n);
        rep(i, n){
            if(s.find(a[i]) != s.end()){
                c[i] = 1;
                d[i] = 1;
            } else {
                c[i] = 1;
                d[i] = 2;
            }
        }
        rep(i, n-1) cout << c[i] << " ";
        cout <<c[n-1] <<'\n';
        rep(i, n-1) cout << d[i] << " ";
        cout << d[n-1]<<'\n';
    }
    
}


int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);

    int t = 1;
    //cin >> t;
    rep(i,0,t) solve();
}
accuracy: 1
time_ms: 40
memory_kb: 8628
final_rank: 13

code_snippet: #line 2 "/Users/noya2/Desktop/Noya2_library/template/template.hpp"
using namespace std;

#include<bits/stdc++.h>
#line 1 "/Users/noya2/Desktop/Noya2_library/template/inout_old.hpp"
namespace noya2 {

template <typename T, typename U>
ostream &operator<<(ostream &os, const pair<T, U> &p){
    os << p.first << " " << p.second;
    return os;
}
template <typename T, typename U>
istream &operator>>(istream &is, pair<T, U> &p){
    is >> p.first >> p.second;
    return is;
}

template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v){
    int s = (int)v.size();
    for (int i = 0; i < s; i++) os << (i ? " " : "") << v[i];
    return os;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v){
    for (auto &x : v) is >> x;
    return is;
}

void in() {}
template <typename T, class... U>
void in(T &t, U &...u){
    cin >> t;
    in(u...);
}

void out() { cout << "\n"; }
template <typename T, class... U, char sep = ' '>
void out(const T &t, const U &...u){
    cout << t;
    if (sizeof...(u)) cout << sep;
    out(u...);
}

template<typename T>
void out(const vector<vector<T>> &vv){
    int s = (int)vv.size();
    for (int i = 0; i < s; i++) out(vv[i]);
}

struct IoSetup {
    IoSetup(){
        cin.tie(nullptr);
        ios::sync_with_stdio(false);
        cout << fixed << setprecision(15);
        cerr << fixed << setprecision(7);
    }
} iosetup_noya2;

} // namespace noya2
#line 1 "/Users/noya2/Desktop/Noya2_library/template/const.hpp"
namespace noya2{

const int iinf = 1'000'000'007;
const long long linf = 2'000'000'000'000'000'000LL;
const long long mod998 =  998244353;
const long long mod107 = 1000000007;
const long double pi = 3.14159265358979323;
const vector<int> dx = {0,1,0,-1,1,1,-1,-1};
const vector<int> dy = {1,0,-1,0,1,-1,-1,1};
const string ALP = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const string alp = "abcdefghijklmnopqrstuvwxyz";
const string NUM = "0123456789";

void yes(){ cout << "Yes\n"; }
void no(){ cout << "No\n"; }
void YES(){ cout << "YES\n"; }
void NO(){ cout << "NO\n"; }
void yn(bool t){ t ? yes() : no(); }
void YN(bool t){ t ? YES() : NO(); }

} // namespace noya2
#line 1 "/Users/noya2/Desktop/Noya2_library/template/utils.hpp"
namespace noya2{

unsigned long long inner_binary_gcd(unsigned long long a, unsigned long long b){
    if (a == 0 || b == 0) return a + b;
    int n = __builtin_ctzll(a); a >>= n;
    int m = __builtin_ctzll(b); b >>= m;
    while (a != b) {
        int mm = __builtin_ctzll(a - b);
        bool f = a > b;
        unsigned long long c = f ? a : b;
        b = f ? b : a;
        a = (c - b) >> mm;
    }
    return a << min(n, m);
}

template<typename T> T gcd_fast(T a, T b){ return static_cast<T>(inner_binary_gcd(abs(a),abs(b))); }

long long sqrt_fast(long long n) {
    if (n <= 0) return 0;
    long long x = sqrt(n);
    while ((x + 1) * (x + 1) <= n) x++;
    while (x * x > n) x--;
    return x;
}

template<typename T> T floor_div(const T n, const T d) {
    assert(d != 0);
    return n / d - static_cast<T>((n ^ d) < 0 && n % d != 0);
}

template<typename T> T ceil_div(const T n, const T d) {
    assert(d != 0);
    return n / d + static_cast<T>((n ^ d) >= 0 && n % d != 0);
}

template<typename T> void uniq(vector<T> &v){
    sort(v.begin(),v.end());
    v.erase(unique(v.begin(),v.end()),v.end());
}

template <typename T, typename U> inline bool chmin(T &x, U y) { return (y < x) ? (x = y, true) : false; }

template <typename T, typename U> inline bool chmax(T &x, U y) { return (x < y) ? (x = y, true) : false; }

template<typename T> inline bool range(T l, T x, T r){ return l <= x && x < r; }

} // namespace noya2
#line 8 "/Users/noya2/Desktop/Noya2_library/template/template.hpp"

#define rep(i,n) for (int i = 0; i < (int)(n); i++)
#define repp(i,m,n) for (int i = (m); i < (int)(n); i++)
#define reb(i,n) for (int i = (int)(n-1); i >= 0; i--)
#define all(v) (v).begin(),(v).end()

using ll = long long;
using ld = long double;
using uint = unsigned int;
using ull = unsigned long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
using pil = pair<int,ll>;
using pli = pair<ll,int>;

namespace noya2{

/*　~ (. _________ . /)　*/

}

using namespace noya2;


#line 2 "c.cpp"


void solve(){
    int n; in(n);
    vector<int> a(n), b(n); in(a,b);
    set<int> st;
    rep(i,n) st.insert(b[i]);
    if ((int)(st.size()) == n){
        yes();
        return ;
    }
    int k = -1;
    rep(i,n) if (st.find(a[i]) == st.end()){
        k = a[i];
        break;
    }
    vector<int> ansc(n,a[0]), ansd(n,a[0]);
    rep(i,n){
        if (a[i] == k){
            ansd[i] = a[1];
        }
    }
    no();
    out(ansc);
    out(ansd);
}

int main(){
    int t = 1; //in(t);
    while (t--) { solve(); }
}
accuracy: 1
time_ms: 40
memory_kb: 8632
final_rank: 14

code_snippet: // #ifndef ONLINE_JUDGE
#if __has_include("all.h")

#include "all.h"

#else

#include <bits/extc++.h>

// #include <atcoder/all>

#endif

using ll = long long int;

template <class T>
bool chmin(T &x, const T val) {
  if (x > val) {
    x = val;
    return true;
  } else {
    return false;
  }
}

template <class T>
bool chmax(T &x, const T val) {
  if (x < val) {
    x = val;
    return true;
  } else {
    return false;
  }
}

template <class T, class U>
std::istream &operator>>(std::istream &is, std::pair<T, U> &p) {
  return is >> p.first >> p.second;
}

template <class... T>
std::istream &operator>>(std::istream &is, std::tuple<T...> &tpl) {
  std::apply([&](auto &&...args) { (is >> ... >> args); }, tpl);
  return is;
}

template <class T>
std::istream &operator>>(std::istream &is, std::vector<T> &v) {
  for (T &x : v) is >> x;
  return is;
}

// template <class mint, atcoder::internal::is_static_modint_t<mint> * =
// nullptr> std::ostream &operator<<(std::ostream &os, const mint &v) {
//   return os << v.val();
// }

template <class T>
std::ostream &operator<<(std::ostream &os, const std::vector<T> &v) {
  for (int i = 0; i < v.size(); i++)
    os << v[i] << (i == v.size() - 1 ? "" : " ");
  return os;
}

struct Initialization {
  Initialization() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
  }
} initialization;

constexpr std::pair<int, int> dir[] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

template <typename T>
using infs = std::numeric_limits<T>;

template <typename T>
class factorials {
 public:
  static size_t n;
  static std::vector<T> fact, inv_fact;

  static void extend(size_t m) {
    if (m <= n) return;
    fact.resize(m + 1);
    inv_fact.resize(m + 1);
    for (size_t i = n + 1; i <= m; i++) fact[i] = fact[i - 1] * i;
    inv_fact[m] = fact[m].inv();
    for (size_t i = m; i > n + 1; i--) inv_fact[i - 1] = inv_fact[i] * i;
    n = m;
  }

  static T inv(int k) {
    extend(k);
    return inv_fact[k];
  }

  static T get(int k) {
    extend(k);
    return fact[k];
  }

  static T perm(int n, int k) {
    if (n < k) return 0;
    if (k < 0) return 0;
    extend(n);
    return fact[n] * inv_fact[n - k];
  }

  static T choose(int n, int k) {
    if (n < k) return 0;
    if (k < 0) return 0;
    extend(n);
    return fact[n] * inv_fact[n - k] * inv_fact[k];
  }
};

template <typename T>
size_t factorials<T>::n = 0;

template <typename T>
std::vector<T> factorials<T>::fact = {1};

template <typename T>
std::vector<T> factorials<T>::inv_fact = {1};

// template <typename T>
// class fps {
//   std::vector<T> v;
//
//  public:
//   using value_type = T;
//   using reference = T &;
//   using const_reference = const T &;
//   using iterator = typename std::vector<T>::iterator;
//   using const_iterator = typename std::vector<T>::const_iterator;
//
//   size_t size() const { return v.size(); }
//
//   const std::vector<T> &data() const { return v; }
//
//   explicit fps(int n) : v(n) {}
//
//   fps(const std::vector<T> &v) : v(v) {}
//   fps(std::vector<T> &&v) : v(v) {}
//
//   template <class InputIterator>
//   fps(InputIterator first, InputIterator last) : v(first, last) {}
//
//   void resize(int n) { v.resize(n); }
//
//   T &operator[](int i) { return v[i]; }
//
//   iterator begin() { return v.begin(); }
//
//   iterator end() { return v.end(); }
//
//   fps diff() {
//     std::vector<T> res(v.size() - 1);
//     for (int i = 0; i < res.size(); i++) res[i] = v[i + 1] * (i + 1);
//     return fps(res);
//   }
//
//   fps integral() {
//     std::vector<T> res(v.size() + 1);
//     for (int i = 0; i < v.size(); i++) res[i + 1] = v[i] / (i + 1);
//     return fps(res);
//   }
//
//   fps inv(int deg = -1) {
//     assert(v[0] != 0);
//
//     if (deg == -1) deg = size();
//     std::vector<T> res(deg);
//
//     res[0] = v[0].inv();
//
//     for (int d = 1; d < deg; d <<= 1) {
//       std::vector<T> f(2 * d), g(2 * d);
//
//       std::copy(v.begin(), v.begin() + std::min(2 * d, (int)v.size()),
//                 std::back_inserter(f));
//       std::copy(res.begin(), res.begin() + d, std::back_inserter(g));
//
//       atcoder::internal::butterfly(f);
//       atcoder::internal::butterfly(g);
//
//       for (int i = 0; i < 2 * d; i++) f[i] *= g[i];
//
//       atcoder::internal::butterfly_inv(f);
//
//       for (int i = 0; i < d; i++) f[i] = 0;
//
//       atcoder::internal::butterfly(f);
//
//       for (int i = 0; i < 2 * d; i++) f[i] *= g[i];
//
//       atcoder::internal::butterfly_inv(f);
//
//       for (int i = d; i < std::min(2 * d, deg); i++) res[i] = -f[i];
//     }
//
//     res.resize(deg);
//
//     return res;
//   }
//
//   fps shift(T c) {
//     std::vector<T> res(size()), ifacts(size());
//
//     T x = 1;
//
//     for (int i = 0; i < size(); i++) {
//       ifacts[i] = x * factorials<T>::inv(i);
//       x *= c;
//     }
//
//     for (int i = 0; i < size(); i++) {
//       res[size() - 1 - i] = v[i] * factorials<T>::get(i);
//     }
//
//     res = atcoder::convolution(res, ifacts);
//
//     res.resize(size());
//
//     std::ranges::reverse(res);
//
//     for (int i = 0; i < size(); i++) {
//       res[i] *= factorials<T>::inv(i);
//     }
//
//     return res;
//   }
//
//   fps operator-() {
//     fps res(v.size());
//     for (int i = 0; i < v.size(); i++) res[i] = -v[i];
//     return res;
//   }
//
//   fps &operator+=(const fps &rhs) {
//     if (v.size() < rhs.v.size()) v.resize(rhs.v.size());
//     for (int i = 0; i < rhs.v.size(); i++) v[i] += rhs.v[i];
//     return *this;
//   }
//
//   fps &operator-=(const fps &rhs) {
//     if (v.size() < rhs.v.size()) v.resize(rhs.v.size());
//     for (int i = 0; i < rhs.v.size(); i++) v[i] -= rhs.v[i];
//     return *this;
//   }
//
//   fps &operator*=(const fps &rhs) {
//     return *this = atcoder::convolution(v, rhs.v);
//   }
//
//   fps &operator+=(const T &rhs) {
//     if (v.size() == 0) v.resize(1);
//     v[0] += rhs;
//     return *this;
//   }
//
//   fps &operator-=(const T &rhs) {
//     if (v.size() == 0) v.resize(1);
//     v[0] -= rhs;
//     return *this;
//   }
//
//   fps &operator*=(const T &rhs) {
//     for (int i = 0; i < v.size(); i++) v[i] *= rhs;
//     return *this;
//   }
//
//   fps &operator/=(const T &rhs) {
//     T rhs_inv = rhs.inv();
//     for (int i = 0; i < v.size(); i++) v[i] *= rhs_inv;
//     return *this;
//   }
//
//   friend fps operator+(const fps &lhs, const fps &rhs) {
//     return fps(lhs) += rhs;
//   }
//
//   friend fps operator-(const fps &lhs, const fps &rhs) {
//     return fps(lhs) -= rhs;
//   }
//
//   friend fps operator*(const fps &lhs, const fps &rhs) {
//     return fps(lhs) *= rhs;
//   }
//
//   friend fps operator+(const fps &lhs, const T &rhs) { return fps(lhs) +=
//   rhs; }
//
//   friend fps operator-(const fps &lhs, const T &rhs) { return fps(lhs) -=
//   rhs; }
//
//   friend fps operator*(const fps &lhs, const T &rhs) { return fps(lhs) *=
//   rhs; }
//
//   friend fps operator/(const fps &lhs, const T &rhs) { return fps(lhs) /=
//   rhs; }
//
//   friend fps operator+(const T &lhs, const fps &rhs) { return fps(rhs) +=
//   lhs; }
//
//   friend fps operator-(const T &lhs, const fps &rhs) {
//     return -(fps(rhs) -= lhs);
//   }
//
//   friend fps operator*(const T &lhs, const fps &rhs) { return fps(rhs) *=
//   lhs; }
// };

// using mint = atcoder::modint998244353;
// using mint = atcoder::modint1000000007;

// using fs = factorials<mint>;

int main() {
  int N;
  std::cin >> N;
  std::vector<int> A(N), B(N);
  std::cin >> A >> B;

  if (N == 1) {
    std::cout << "Yes\n";
    return 0;
  }

  std::set<int> S(B.begin(), B.end());

  if (S.size() == N) {
    std::cout << "Yes\n";
    return 0;
  }

  std::vector<int> C(N), D(N);

  for (int i = 0; i < N; i++) {
    if (S.find(A[i]) == S.end()) {
      C[i] = A[0];
      D[i] = A[1];
    } else {
      C[i] = D[i] = A[i];
    }
  }

  std::cout << "No\n";
  std::cout << C << '\n';
  std::cout << D << '\n';
}
accuracy: 1
time_ms: 40
memory_kb: 8632
final_rank: 14

code_snippet: #include<bits/stdc++.h>
using namespace std;
using ll = long long;

int main(){
  int n;
  cin >> n;
  vector<int> a(n),b(n);
  vector<int> c(n,0);
  set<int> s;
  bool ok=true;
  for (int i=0;i<n;i++) cin >> a[i];
  for (int i=0;i<n;i++) {
    cin >> b[i];
    c[b[i]-1]=1;
    if (s.find(b[i])!=s.end()){
      ok=false;
    }
    s.insert(b[i]);
  }
  if (ok) cout << "Yes" << endl;
  else {
    cout << "No" << endl;
    for (int i=0;i<n;i++) {
      if (i!=n-1) cout << 1 << " ";
      else cout << 1 << endl;
    }
    int o=-1;
    for (int i=0;i<n;i++){
      if (c[i]==0) o=i+1;
    }
    for (int i=0;i<n;i++){
      if (a[i]==o){
        o=i;
        break;
      }
    }
    for (int i=0;i<n;i++) {
      if (o==i) cout << 2;
      else cout << 1;
      if (i!=n-1) cout << " ";
      else cout << endl;
    }
  }
  
}
accuracy: 1
time_ms: 60
memory_kb: 8924
final_rank: 16

code_snippet: #include<bits/stdc++.h>
using namespace std;
using ll = long long;

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];
    bool fn = true;
    vector<int> ans(n);
    int ni = 0,nj = 0;
    vector<int> cnt(n+1,-1);
    for(int i = 0;i<n;i++){
        if(cnt[b[i]]==-1){
            cnt[b[i]] = i;
            continue;
        }
    }
    for(int i = 0;i<n;i++) if(cnt[a[i]]==-1) {fn = false;}
    if(fn) cout<<"Yes\n";
    else {
        cout<<"No\n";
        for(int i = 0;i<n;i++){
            if(i!=0) cout<<" ";
            cout<<b[0];
        }
        cout<<endl;
        for(int i = 0;i<n;i++){
            if(i!=0) cout<<" ";
            if(cnt[a[i]]==-1) cout<<a[i];
            else cout<<b[0];
        }
        cout<<endl;
    }
}
accuracy: 1
time_ms: 40
memory_kb: 4696
final_rank: 9

code_snippet: #line 2 "/home/yuruhiya/programming/library/template/template.cpp"
#include <bits/stdc++.h>
#line 4 "/home/yuruhiya/programming/library/template/constants.cpp"
#include <string_view>
#line 7 "/home/yuruhiya/programming/library/template/constants.cpp"

#define rep(i, n) for (int i = 0; i < (n); ++i)
#define FOR(i, m, n) for (int i = (m); i < (n); ++i)
#define rrep(i, n) for (int i = (n)-1; i >= 0; --i)
#define rfor(i, m, n) for (int i = (m); i >= (n); --i)
#define unless(c) if (!(c))
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define range_it(a, l, r) (a).begin() + (l), (a).begin() + (r)

using namespace std;
using ll = long long;
using LD = long double;
using VB = vector<bool>;
using VVB = vector<VB>;
using VI = vector<int>;
using VVI = vector<VI>;
using VL = vector<ll>;
using VVL = vector<VL>;
using VS = vector<string>;
using VD = vector<LD>;
using PII = pair<int, int>;
using VP = vector<PII>;
using PLL = pair<ll, ll>;
using VPL = vector<PLL>;
template <class T> using PQ = priority_queue<T>;
template <class T> using PQS = priority_queue<T, vector<T>, greater<T>>;
constexpr int inf = 1000000000;
constexpr long long inf_ll = 1000000000000000000ll, MOD = 1000000007;
constexpr long double PI = 3.14159265358979323846, EPS = 1e-12;
namespace CharacterClass {
	constexpr string_view
	    digit = "0123456789",
	    xdigit = "0123456789ABCDEFabcdef", lower = "abcdefghijklmnopqrstuvwxyz",
	    upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
	    alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
	    alnum = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
	    word = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz",
	    punct = R"(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)",
	    graph =
	        R"(!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)",
	    print =
	        R"( !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)",
	    blank = " \t", space = " \t\n\r\f\v";
}  // namespace CharacterClass
#line 7 "/home/yuruhiya/programming/library/template/Input.cpp"
using namespace std;

#ifdef _WIN32
#define getchar_unlocked _getchar_nolock
#define putchar_unlocked _putchar_nolock
#define fwrite_unlocked fwrite
#define fflush_unlocked fflush
#endif
class Scanner {
	static int gc() {
		return getchar_unlocked();
	}
	static char next_char() {
		char c;
		read(c);
		return c;
	}
	template <class T> static void read(T& v) {
		cin >> v;
	}
	static void read(char& v) {
		while (isspace(v = gc()))
			;
	}
	static void read(bool& v) {
		v = next_char() != '0';
	}
	static void read(string& v) {
		v.clear();
		for (char c = next_char(); !isspace(c); c = gc()) v += c;
	}
	static void read(int& v) {
		v = 0;
		bool neg = false;
		char c = next_char();
		if (c == '-') {
			neg = true;
			c = gc();
		}
		for (; isdigit(c); c = gc()) v = v * 10 + (c - '0');
		if (neg) v = -v;
	}
	static void read(long long& v) {
		v = 0;
		bool neg = false;
		char c = next_char();
		if (c == '-') {
			neg = true;
			c = gc();
		}
		for (; isdigit(c); c = gc()) v = v * 10 + (c - '0');
		if (neg) v = -v;
	}
	static void read(double& v) {
		v = 0;
		double dp = 1;
		bool neg = false, after_dp = false;
		char c = next_char();
		if (c == '-') {
			neg = true;
			c = gc();
		}
		for (; isdigit(c) || c == '.'; c = gc()) {
			if (c == '.') {
				after_dp = true;
			} else if (after_dp) {
				v += (c - '0') * (dp *= 0.1);
			} else {
				v = v * 10 + (c - '0');
			}
		}
		if (neg) v = -v;
	}
	static void read(long double& v) {
		v = 0;
		long double dp = 1;
		bool neg = false, after_dp = false;
		char c = next_char();
		if (c == '-') {
			neg = true;
			c = gc();
		}
		for (; isdigit(c) || c == '.'; c = gc()) {
			if (c == '.') {
				after_dp = true;
			} else if (after_dp) {
				v += (c - '0') * (dp *= 0.1);
			} else {
				v = v * 10 + (c - '0');
			}
		}
		if (neg) v = -v;
	}
	template <class T, class U> static void read(pair<T, U>& v) {
		read(v.first);
		read(v.second);
	}
	template <class T> static void read(vector<T>& v) {
		for (auto& e : v) read(e);
	}
	template <size_t N = 0, class T> static void read_tuple_impl(T& v) {
		if constexpr (N < tuple_size_v<T>) {
			read(get<N>(v));
			read_tuple_impl<N + 1>(v);
		}
	}
	template <class... T> static void read(tuple<T...>& v) {
		read_tuple_impl(v);
	}
	struct ReadVectorHelper {
		size_t n;
		ReadVectorHelper(size_t _n) : n(_n) {}
		template <class T> operator vector<T>() {
			vector<T> v(n);
			read(v);
			return v;
		}
	};
	struct Read2DVectorHelper {
		size_t n, m;
		Read2DVectorHelper(const pair<size_t, size_t>& nm) : n(nm.first), m(nm.second) {}
		template <class T> operator vector<vector<T>>() {
			vector<vector<T>> v(n, vector<T>(m));
			read(v);
			return v;
		}
	};

public:
	string read_line() const {
		string v;
		for (char c = gc(); c != '\n' && c != '\0'; c = gc()) v += c;
		return v;
	}
	template <class T> T read() const {
		T v;
		read(v);
		return v;
	}
	template <class T> vector<T> read_vector(size_t n) const {
		vector<T> a(n);
		read(a);
		return a;
	}
	template <class T> operator T() const {
		return read<T>();
	}
	int operator--(int) const {
		return read<int>() - 1;
	}
	ReadVectorHelper operator[](size_t n) const {
		return ReadVectorHelper(n);
	}
	Read2DVectorHelper operator[](const pair<size_t, size_t>& nm) const {
		return Read2DVectorHelper(nm);
	}
	void operator()() const {}
	template <class H, class... T> void operator()(H&& h, T&&... t) const {
		read(h);
		operator()(forward<T>(t)...);
	}

private:
	template <template <class...> class, class...> struct Multiple;
	template <template <class...> class V, class Head, class... Tail>
	struct Multiple<V, Head, Tail...> {
		template <class... Args> using vec = V<vector<Head>, Args...>;
		using type = typename Multiple<vec, Tail...>::type;
	};
	template <template <class...> class V> struct Multiple<V> { using type = V<>; };
	template <class... T> using multiple_t = typename Multiple<tuple, T...>::type;
	template <size_t N = 0, class T> void multiple_impl(T& t) const {
		if constexpr (N < tuple_size_v<T>) {
			auto& vec = get<N>(t);
			using V = typename remove_reference_t<decltype(vec)>::value_type;
			vec.push_back(read<V>());
			multiple_impl<N + 1>(t);
		}
	}

public:
	template <class... T> auto multiple(size_t h) const {
		multiple_t<T...> result;
		while (h--) multiple_impl(result);
		return result;
	}
} in;
#define inputs(T, ...) \
	T __VA_ARGS__;     \
	in(__VA_ARGS__)
#define ini(...) inputs(int, __VA_ARGS__)
#define inl(...) inputs(long long, __VA_ARGS__)
#define ins(...) inputs(string, __VA_ARGS__)
#line 7 "/home/yuruhiya/programming/library/template/Output.cpp"
#include <charconv>
#line 10 "/home/yuruhiya/programming/library/template/Output.cpp"
using namespace std;

struct BoolStr {
	const char *t, *f;
	BoolStr(const char* _t, const char* _f) : t(_t), f(_f) {}
} Yes("Yes", "No"), yes("yes", "no"), YES("YES", "NO"), Int("1", "0");
struct DivStr {
	const char *d, *l;
	DivStr(const char* _d, const char* _l) : d(_d), l(_l) {}
} spc(" ", "\n"), no_spc("", "\n"), end_line("\n", "\n"), comma(",", "\n"),
    no_endl(" ", "");
class Output {
	BoolStr B{Yes};
	DivStr D{spc};

public:
	void put(int v) const {
		char buf[12]{};
		if (auto [ptr, e] = to_chars(begin(buf), end(buf), v); e == errc{}) {
			fwrite(buf, sizeof(char), ptr - buf, stdout);
		} else {
			assert(false);
		}
	}
	void put(long long v) const {
		char buf[21]{};
		if (auto [ptr, e] = to_chars(begin(buf), end(buf), v); e == errc{}) {
			fwrite(buf, sizeof(char), ptr - buf, stdout);
		} else {
			assert(false);
		}
	}
	void put(bool v) const {
		put(v ? B.t : B.f);
	}
	void put(vector<bool>::reference v) const {
		put(v ? B.t : B.f);
	}
	void put(char v) const {
		putchar_unlocked(v);
	}
	void put(const char* v) const {
		fwrite_unlocked(v, 1, strlen(v), stdout);
	}
	void put(double v) const {
		printf("%.20f", v);
	}
	void put(long double v) const {
		printf("%.20Lf", v);
	}
	template <class T> void put(const T& v) const {
		cout << v;
	}
	template <class T, class U> void put(const pair<T, U>& v) const {
		put(v.first);
		put(D.d);
		put(v.second);
	}
	template <class InputIterater>
	void put_range(const InputIterater& begin, const InputIterater& end) const {
		for (InputIterater i = begin; i != end; ++i) {
			if (i != begin) put(D.d);
			put(*i);
		}
	}
	template <class T> void put(const vector<T>& v) const {
		put_range(v.begin(), v.end());
	}
	template <class T, size_t N> void put(const array<T, N>& v) const {
		put_range(v.begin(), v.end());
	}
	template <class T> void put(const vector<vector<T>>& v) const {
		for (size_t i = 0; i < v.size(); ++i) {
			if (i) put(D.l);
			put(v[i]);
		}
	}

	Output() = default;
	Output(const BoolStr& _boolstr, const DivStr& _divstr) : B(_boolstr), D(_divstr) {}
	Output& operator()() {
		put(D.l);
		return *this;
	}
	template <class H> Output& operator()(H&& h) {
		put(h);
		put(D.l);
		return *this;
	}
	template <class H, class... T> Output& operator()(H&& h, T&&... t) {
		put(h);
		put(D.d);
		return operator()(forward<T>(t)...);
	}
	template <class InputIterator>
	Output& range(const InputIterator& begin, const InputIterator& end) {
		put_range(begin, end);
		put(D.l);
		return *this;
	}
	template <class T> Output& range(const T& a) {
		range(a.begin(), a.end());
		return *this;
	}
	template <class... T> void exit(T&&... t) {
		operator()(forward<T>(t)...);
		std::exit(EXIT_SUCCESS);
	}
	Output& flush() {
		fflush_unlocked(stdout);
		return *this;
	}
	Output& set(const BoolStr& b) {
		B = b;
		return *this;
	}
	Output& set(const DivStr& d) {
		D = d;
		return *this;
	}
	Output& set(const char* t, const char* f) {
		B = BoolStr(t, f);
		return *this;
	}
} out;
#line 3 "/home/yuruhiya/programming/library/template/Step.cpp"
using namespace std;

template <class T> struct Step {
	using value_type = T;

	class iterator {
		value_type a, b, c;

	public:
		constexpr iterator() : a(value_type()), b(value_type()), c(value_type()) {}
		constexpr iterator(value_type _b, value_type _c, value_type _s)
		    : a(_b), b(_c), c(_s) {}
		constexpr iterator& operator++() {
			--b;
			a += c;
			return *this;
		}
		constexpr iterator operator++(int) {
			iterator tmp = *this;
			--b;
			a += c;
			return tmp;
		}
		constexpr const value_type& operator*() const {
			return a;
		}
		constexpr const value_type* operator->() const {
			return &a;
		}
		constexpr bool operator==(const iterator& i) const {
			return b == i.b;
		}
		constexpr bool operator!=(const iterator& i) const {
			return !(b == i.b);
		}
		constexpr value_type start() const {
			return a;
		}
		constexpr value_type size() const {
			return b;
		}
		constexpr value_type step() const {
			return c;
		}
	};
	constexpr Step(value_type b, value_type c, value_type s) : be(b, c, s) {}
	constexpr iterator begin() const {
		return be;
	}
	constexpr iterator end() const {
		return en;
	}
	constexpr value_type start() const {
		return be.start();
	}
	constexpr value_type size() const {
		return be.size();
	}
	constexpr value_type step() const {
		return be.step();
	}
	constexpr value_type sum() const {
		return start() * size() + step() * (size() * (size() - 1) / 2);
	}
	operator vector<value_type>() const {
		return to_a();
	}
	auto to_a() const {
		vector<value_type> result;
		result.reserve(size());
		for (auto i : *this) {
			result.push_back(i);
		}
		return result;
	}

private:
	iterator be, en;
};
template <class T> constexpr auto step(T a) {
	return Step<T>(0, a, 1);
}
template <class T> constexpr auto step(T a, T b) {
	return Step<T>(a, b - a, 1);
}
template <class T> constexpr auto step(T a, T b, T c) {
	return Step<T>(a, a < b ? (b - a - 1) / c + 1 : 0, c);
}
#line 8 "/home/yuruhiya/programming/library/template/Ruby.cpp"
using namespace std;

template <class F> struct Callable {
	F func;
	Callable(const F& f) : func(f) {}
};
template <class T, class F> auto operator|(const T& v, const Callable<F>& c) {
	return c.func(v);
}

struct Sort_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			sort(begin(v), end(v), f);
			return v;
		});
	}
	template <class T> friend auto operator|(T v, [[maybe_unused]] const Sort_impl& c) {
		sort(begin(v), end(v));
		return v;
	}
} Sort;
struct SortBy_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			sort(begin(v), end(v),
			     [&](const auto& i, const auto& j) { return f(i) < f(j); });
			return v;
		});
	}
} SortBy;
struct RSort_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			sort(rbegin(v), rend(v), f);
			return v;
		});
	}
	template <class T> friend auto operator|(T v, [[maybe_unused]] const RSort_impl& c) {
		sort(rbegin(v), rend(v));
		return v;
	}
} RSort;
struct RSortBy_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			sort(begin(v), end(v),
			     [&](const auto& i, const auto& j) { return f(i) > f(j); });
			return v;
		});
	}
} RSortBy;
struct Reverse_impl {
	template <class T> friend auto operator|(T v, const Reverse_impl& c) {
		reverse(begin(v), end(v));
		return v;
	}
} Reverse;
struct Unique_impl {
	template <class T> friend auto operator|(T v, const Unique_impl& c) {
		v.erase(unique(begin(v), end(v), end(v)));
		return v;
	}
} Unique;
struct Uniq_impl {
	template <class T> friend auto operator|(T v, const Uniq_impl& c) {
		sort(begin(v), end(v));
		v.erase(unique(begin(v), end(v)), end(v));
		return v;
	}
} Uniq;
struct Rotate_impl {
	auto operator()(int&& left) {
		return Callable([&](auto v) {
			int s = static_cast<int>(size(v));
			assert(-s <= left && left <= s);
			if (0 <= left) {
				rotate(begin(v), begin(v) + left, end(v));
			} else {
				rotate(begin(v), end(v) + left, end(v));
			}
			return v;
		});
	}
} Rotate;
struct Max_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) { return *max_element(begin(v), end(v), f); });
	}
	template <class T> friend auto operator|(T v, const Max_impl& c) {
		return *max_element(begin(v), end(v));
	}
} Max;
struct Min_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) { return *min_element(begin(v), end(v), f); });
	}
	template <class T> friend auto operator|(T v, const Min_impl& c) {
		return *min_element(begin(v), end(v));
	}
} Min;
struct MaxPos_impl {
	template <class T> friend auto operator|(T v, const MaxPos_impl& c) {
		return max_element(begin(v), end(v)) - begin(v);
	}
} MaxPos;
struct MinPos_impl {
	template <class T> friend auto operator|(T v, const MinPos_impl& c) {
		return min_element(begin(v), end(v)) - begin(v);
	}
} MinPos;
struct MaxBy_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			auto max_it = begin(v);
			auto max_val = f(*max_it);
			for (auto it = next(begin(v)); it != end(v); ++it) {
				if (auto val = f(*it); max_val < val) {
					max_it = it;
					max_val = val;
				}
			}
			return *max_it;
		});
	}
} MaxBy;
struct MinBy_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			auto min_it = begin(v);
			auto min_val = f(*min_it);
			for (auto it = next(begin(v)); it != end(v); ++it) {
				if (auto val = f(*it); min_val > val) {
					min_it = it;
					min_val = val;
				}
			}
			return *min_it;
		});
	}
} MinBy;
struct MaxOf_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			auto max_val = f(*begin(v));
			for (auto it = next(begin(v)); it != end(v); ++it) {
				if (auto val = f(*it); max_val < val) {
					max_val = val;
				}
			}
			return max_val;
		});
	}
} MaxOf;
struct MinOf_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			auto min_val = f(*begin(v));
			for (auto it = next(begin(v)); it != end(v); ++it) {
				if (auto val = f(*it); min_val > val) {
					min_val = val;
				}
			}
			return min_val;
		});
	}
} MinOf;
struct Count_impl {
	template <class V> auto operator()(const V& val) {
		return Callable([&](auto v) { return count(begin(v), end(v), val); });
	}
} Count;
struct CountIf_impl {
	template <class F> auto operator()(const F& f) {
		return Callable([&](auto v) { return count_if(begin(v), end(v), f); });
	}
} CountIf;
struct Index_impl {
	template <class V> auto operator()(const V& val) {
		return Callable([&](auto v) -> optional<int> {
			auto result = find(begin(v), end(v), val);
			return result != end(v) ? optional(result - begin(v)) : nullopt;
		});
	}
} Index;
struct IndexIf_impl {
	template <class F> auto operator()(const F& f) {
		return Callable([&](auto v) -> optional<int> {
			auto result = find_if(begin(v), end(v), f);
			return result != end(v) ? optional(result - begin(v)) : nullopt;
		});
	}
} IndexIf;
struct FindIf_impl {
	template <class F> auto operator()(const F& f) {
		return Callable([&](auto v) -> optional<typename decltype(v)::value_type> {
			auto result = find_if(begin(v), end(v), f);
			return result != end(v) ? optional(*result) : nullopt;
		});
	}
} FindIf;
struct Sum_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			return accumulate(next(begin(v)), end(v), f(*begin(v)),
			                  [&](const auto& a, const auto& b) { return a + f(b); });
		});
	}
	template <class T> friend auto operator|(T v, const Sum_impl& c) {
		return accumulate(begin(v), end(v), typename T::value_type{});
	}
} Sum;
struct Includes {
	template <class V> auto operator()(const V& val) {
		return Callable([&](auto v) { return find(begin(v), end(v), val) != end(v); });
	}
} Includes;
struct IncludesIf_impl {
	template <class F> auto operator()(const F& f) {
		return Callable([&](auto v) { return find_if(begin(v), end(v), f) != end(v); });
	}
} IncludesIf;
struct RemoveIf_impl {
	template <class F> auto operator()(const F& f) {
		return Callable([&](auto v) {
			v.erase(remove_if(begin(v), end(v), f), end(v));
			return v;
		});
	}
} RemoveIf;
struct Each_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			for (const auto& i : v) {
				f(i);
			}
		});
	}
} Each;
struct Select_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			using value_type = typename decltype(v)::value_type;
			vector<value_type> result;
			for (const auto& i : v) {
				if (f(i)) result.push_back(i);
			}
			return result;
		});
	}
} Select;
struct Map_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			using result_type = invoke_result_t<F, typename decltype(v)::value_type>;
			vector<result_type> result;
			result.reserve(size(v));
			for (const auto& i : v) {
				result.push_back(f(i));
			}
			return result;
		});
	}
} Map;
struct Indexed_impl {
	template <class T> friend auto operator|(const T& v, Indexed_impl& c) {
		using value_type = typename T::value_type;
		vector<pair<value_type, int>> result;
		result.reserve(size(v));
		int index = 0;
		for (const auto& i : v) {
			result.emplace_back(i, index++);
		}
		return result;
	}
} Indexed;
struct AllOf_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			for (const auto& i : v) {
				if (!f(i)) return false;
			}
			return true;
		});
	}
} AllOf;
struct AnyOf_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			for (const auto& i : v) {
				if (f(i)) return true;
			}
			return false;
		});
	}
} AnyOf;
struct NoneOf_impl {
	template <class F> auto operator()(F&& f) {
		return Callable([&](auto v) {
			for (const auto& i : v) {
				if (f(i)) return false;
			}
			return true;
		});
	}
} NoneOf;

struct Tally_impl {
	template <class F> auto operator()(size_t max_val) {
		return Callable([&](auto v) {
			vector<size_t> result(max_val);
			for (const auto& i : v) {
				result[static_cast<size_t>(i)]++;
			}
			return result;
		});
	}
	template <class T, class value_type = typename T::value_type>
	friend auto operator|(const T& v, Tally_impl& c) {
		map<value_type, size_t> result;
		for (const auto& i : v) {
			result[i]++;
		}
		return result;
	}
} Tally;

template <class T> auto operator*(const vector<T>& a, size_t n) {
	T result;
	for (size_t i = 0; i < n; ++i) {
		result.insert(result.end(), a.begin(), a.end());
	}
	return result;
}
auto operator*(string a, size_t n) {
	string result;
	for (size_t i = 0; i < n; ++i) {
		result += a;
	}
	return result;
}
template <class T, class U> auto& operator<<(vector<T>& a, const U& b) {
	a.insert(a.end(), all(b));
	return a;
}
template <class T> auto& operator<<(string& a, const T& b) {
	a.insert(a.end(), all(b));
	return a;
}
template <class T, class U> auto operator+(vector<T> a, const U& b) {
	a << b;
	return a;
}
template <class T> auto operator+(string a, const T& b) {
	a << b;
	return a;
}
#line 7 "/home/yuruhiya/programming/library/template/functions.cpp"
using namespace std;

template <class T = long long> constexpr T TEN(size_t n) {
	T result = 1;
	for (size_t i = 0; i < n; ++i) result *= 10;
	return result;
}
template <class T, class U,
          enable_if_t<is_integral_v<T> && is_integral_v<U>, nullptr_t> = nullptr>
constexpr auto div_ceil(T n, U m) {
	return (n + m - 1) / m;
}
template <class T, class U> constexpr auto div_ceil2(T n, U m) {
	return div_ceil(n, m) * m;
}
template <class T> constexpr T triangle(T n) {
	return (n & 1) ? (n + 1) / 2 * n : n / 2 * (n + 1);
}
template <class T> constexpr T nC2(T n) {
	return (n & 1) ? (n - 1) / 2 * n : n / 2 * (n - 1);
}
template <class T, class U> constexpr auto middle(const T& l, const U& r) {
	return l + (r - l) / 2;
}
template <class T, class U, class V>
constexpr bool in_range(const T& v, const U& lower, const V& upper) {
	return lower <= v && v < upper;
}
template <class T, enable_if_t<is_integral_v<T>, nullptr_t> = nullptr>
constexpr bool is_square(T n) {
	T s = sqrt(n);
	return s * s == n || (s + 1) * (s + 1) == n;
}
template <class T = long long> constexpr T BIT(int b) {
	return T(1) << b;
}
template <class T, class U, enable_if_t<is_integral_v<U>, nullptr_t> = nullptr>
constexpr T Pow(T a, U n) {
	assert(n >= 0);
	T result = 1;
	while (n > 0) {
		if (n & 1) {
			result *= a;
			n--;
		} else {
			a *= a;
			n >>= 1;
		}
	}
	return result;
}
template <class T, class U, enable_if_t<is_integral_v<U>, nullptr_t> = nullptr>
constexpr T Powmod(T a, U n, T mod) {
	assert(n >= 0);
	if (a > mod) a %= mod;
	T result = 1;
	while (n > 0) {
		if (n & 1) {
			result = result * a % mod;
			n--;
		} else {
			a = a * a % mod;
			n >>= 1;
		}
	}
	return result;
}
template <class T> bool chmax(T& a, const T& b) {
	if (a < b) {
		a = b;
		return true;
	}
	return false;
}
template <class T> bool chmin(T& a, const T& b) {
	if (a > b) {
		a = b;
		return true;
	}
	return false;
}
template <class T> int sz(const T& v) {
	return v.size();
}
template <class T, class U> int lower_index(const T& a, const U& v) {
	return lower_bound(all(a), v) - a.begin();
}
template <class T, class U> int upper_index(const T& a, const U& v) {
	return upper_bound(all(a), v) - a.begin();
}
template <class T> auto Slice(const T& v, size_t i, size_t len) {
	return i < v.size() ? T(v.begin() + i, v.begin() + min(i + len, v.size())) : T();
}
template <class T, class U = typename T::value_type> U Gcdv(const T& v) {
	return accumulate(next(v.begin()), v.end(), U(*v.begin()), gcd<U, U>);
}
template <class T, class U = typename T::value_type> U Lcmv(const T& v) {
	return accumulate(next(v.begin()), v.end(), U(*v.begin()), lcm<U, U>);
}
namespace internal {
	template <class T, size_t N> auto make_vector(vector<int>& sizes, const T& init) {
		if constexpr (N == 1) {
			return vector(sizes[0], init);
		} else {
			int size = sizes[N - 1];
			sizes.pop_back();
			return vector(size, make_vector<T, N - 1>(sizes, init));
		}
	}
}  // namespace internal
template <class T, size_t N>
auto make_vector(const int (&sizes)[N], const T& init = T()) {
	vector s(rbegin(sizes), rend(sizes));
	return internal::make_vector<T, N>(s, init);
}
#line 9 "/home/yuruhiya/programming/library/template/template.cpp"
#if __has_include(<library/dump.hpp>)
#include <library/dump.hpp>
#define LOCAL
#else
#define dump(...) ((void)0)
#endif

template <class T> constexpr T oj_local(const T& oj, const T& local) {
#ifndef LOCAL
	return oj;
#else
	return local;
#endif
}
#line 2 "a.cpp"

int main() {
	ini(n);
	VI a = in[n], b = in[n];

	if ((a | Sort) == (b | Sort)) {
		out(true);
	} else {
		out(false);
		VB flag(n);
		rep(i, n) {
			flag[b[i] - 1] = true;
		}
		int val = -1;
		rep(i, n) {
			if (!flag[i]) {
				val = i + 1;
				break;
			}
		}
		int ind = -1;
		rep(i, n) {
			if (a[i] == val) {
				ind = i;
			}
		}
		dump(flag, val, ind);

		VI c = step(1, n + 1), d = step(1, n + 1);
		d[ind] = c[ind] == 1 ? 2 : 1;
		out(c)(d);
	}
}
accuracy: 1
time_ms: 10
memory_kb: 4640
final_rank: 2

code_snippet: #include <bits/stdc++.h>
 
const double pi = 3.141592653589793238462643383279;
using namespace std;

//typedef
//------------------------------------------
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<string> VS;
typedef pair<int, int> PII;
typedef pair<long long, long long> PLL;
typedef pair<int, PII> TIII;
typedef long long LL;
typedef unsigned long long ULL;
typedef vector<LL> VLL;
typedef vector<VLL> VVLL;
 
 
//container util
//------------------------------------------
#define ALL(a)  (a).begin(),(a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define PB push_back
#define MP make_pair
#define SQ(a) ((a)*(a))
#define EACH(i,c) for(typeof((c).begin()) i=(c).begin(); i!=(c).end(); ++i)
#define EXIST(s,e) ((s).find(e)!=(s).end())
#define SORT(c) sort((c).begin(),(c).end())
 
 
//repetition
//------------------------------------------
#define FOR(i,s,n) for(int i=s;i<(int)n;++i)
#define REP(i,n) FOR(i,0,n)
#define MOD 1000000007
 
 
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define trav(a, x) for(auto& a : x)
#define all(x) x.begin(), x.end()
#define sz(x) (int)(x).size()
 
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
 
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)

const long double EPS = 1e-6, PI = acos((long double)-1);

//ここから編集

 
const int MAX = 2000010;
long long fac[MAX], finv[MAX], inv[MAX];
 
// テーブルを作る前処理
void COMinit() {
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for (int i = 2; i < MAX; i++){
        fac[i] = fac[i - 1] * i % MOD;
        inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD;
        finv[i] = finv[i - 1] * inv[i] % MOD;
    }
}
 
// 二項係数計算
long long COM(int n, int k){
    if (n < k) return 0;
    if (n < 0 || k < 0) return 0;
    return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}
ll GCD(ll a, ll b){
  if(b == 0) return a;
  return GCD(b, a%b);
}
ll LCM(ll a, ll b){
  return a/GCD(a, b)*b;
}

int e1[101010], e2[101010];
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cout << fixed << setprecision(10);
 
  int N; cin >> N;
  vector<int> a(N), b(N);
  REP(i,N) cin >> a[i], e1[a[i]]=1;
  REP(i,N) cin >> b[i], e2[b[i]]=1;

  vector<int> idx;
  REP(i,N){
    if(e2[a[i]] == 0){
      idx.push_back(i);
    }
  }
  if(idx.size() == 0){
    cout << "Yes" << endl;
  }else{
    
    vector<int> c(N), d(N);
    REP(i,N){
      c[i] = d[i] = i+1;
    }

    REP(i,idx.size()){
      int t = idx[i];
      d[t] = c[(t+1)%N];
    }
    cout << "No" << endl;
    for(int i=0; i<N; i++){
      if(i) cout << " ";
      cout << c[i];
    }
    cout << endl;
    for(int i=0; i<N; i++){
      if(i) cout << " ";
      cout << d[i];
    }
    cout << endl;
  }

  return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 5672
final_rank: 5

code_snippet: #include <iostream>
#include <vector>

void solve() {
    int n;
    std::cin >> n;

    std::vector<int> arev(n);
    for (int i = 0; i < n; ++i) {
        int a;
        std::cin >> a;
        arev[--a] = i;
    }

    std::vector<bool> used(n, false);
    for (int i = 0; i < n; ++i) {
        int b;
        std::cin >> b;
        used[--b] = true;
    }

    for (int x = 0; x < n; ++x) {
        if (used[x]) continue;

        std::cout << "No\n";
        for (int i = 0; i < n; ++i) {
            std::cout << 1 << " \n"[i == n - 1];
        }

        for (int i = 0; i < n; ++i) {
            std::cout << (arev[x] == i ? 2 : 1) << " \n"[i == n - 1];
        }
        return;
    }

    std::cout << "Yes\n";
}

int main() {
    std::cin.tie(nullptr);
    std::ios::sync_with_stdio(false);

    solve();

    return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 3476
final_rank: 1

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

// macro
#define rep(i,n) for(i=0;i<n;i++)
#define ll long long
#define all(v) v.begin(), v.end()

// code starts
int main()
{
  int n;cin>>n;
  vector<int> a(n);
  vector<int> b(n);
  int i;
  rep(i,n)cin>>a[i];
  rep(i,n)cin>>b[i];
  rep(i,n)
  {
    a[i]--;
    b[i]--;
  }
  //vector<int> pos(n,0);
  //rep(i,n)pos[a[i]]=i;
  vector<int> counts(n,0);
  rep(i,n)
  {
    counts[b[i]]++;
  }
  bool ok=true;
  vector<bool> bfind(n,false);
  rep(i,n)
  {
    if(counts[i]!=1)ok=false;
    bfind[b[i]]=true;
  }
  if(ok)cout<<"Yes"<<endl;
  else
  {
    cout<<"No"<<endl;
    rep(i,n)
    {
      if(i!=0)cout<<' ';
      cout<<1;
    }
    cout<<endl;
    int count=1;
    rep(i,n)
    {
      if(i!=0)cout<<' ';
      if(!bfind[a[i]])
      {
        cout<<count+1;
        count++;
      }
      else cout<<1;

    }
    cout<<endl;
  }
}
accuracy: 1
time_ms: 50
memory_kb: 4076
final_rank: 11

code_snippet: #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define rep(i,n) for (int i = 0; i < (n); ++i)
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
const ll INF=1LL<<60;
const int inf=(1<<30)-1;
const int mod=1e9+7;
int dx[8]={1,0,-1,0,-1,-1,1,1};
int dy[8]={0,1,0,-1,-1,1,-1,1};
int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);
    int n;cin >> n;
    vector<int> a(n),b(n);
    rep(i,n){
        cin >> a[i];
        a[i]--;
    }
    vector<bool> c(n);
    rep(i,n){
        cin >> b[i];
        b[i]--;
        c[b[i]]=true;
    }
    bool f=true;
    int u,v;
    rep(i,n){
        if(!c[a[i]]){
            f=false;
            u=a[i];
        }
        else{
            v=a[i];
        }
    }
    if(f){
        cout << "Yes" << endl;
    }
    else{
        cout << "No" << endl;
        rep(i,n){
            cout << a[i]+1;
            if(i!=n-1){
                cout << " ";
            }
        }
        cout << endl;
        rep(i,n){
            if(a[i]==u){
                cout << v+1;
            }
            else{
                cout << a[i]+1;
            }
            if(i!=n-1){
                cout << " ";
            }
        }
        cout << endl;
    }
}
accuracy: 1
time_ms: 20
memory_kb: 3840
final_rank: 3

code_snippet: #include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define ll long long
#define pp pair<ll,ll>
#define ld long double
#define all(a) (a).begin(),(a).end()
#define mk make_pair
ll MOD=998244353;
int inf=1000001000;
ll INF=1e18+5;
ll mod=INF;


int main() {
    int n;
    cin >> n;
    vector<int> a(n),b(n);
    rep(i,n) cin >> a[i];
    rep(i,n) cin >> b[i];
    vector<int> c(n,0);
    rep(i,n){
        c[b[i]-1]=1;
    }
    bool t=true;
    rep(i,n){
        if (c[i]==0) t=false;
    }
    if (t){
        cout << "Yes" << endl;
        return 0;
    }
    vector<int> u(n),y(n);
    cout << "No" << endl;
    rep(i,n){
        if (c[a[i]-1]==1){
            u[i]=1;
            y[i]=1;
        }
        else{
            u[i]=1;
            y[i]=2;
        }
    }
    rep(i,n-1) cout << u[i] << " ";
    cout << u[n-1] << endl;
    rep(i,n-1) cout << y[i] << " ";
    cout << y[n-1] << endl;
}
accuracy: 1
time_ms: 50
memory_kb: 4640
final_rank: 12

code_snippet: #include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define REP(i,n) for (ll i = 0, i##_len = (n); i < i##_len; i++)

int main() {

    ll n; cin >> n;
    vector<ll> a(n), b(n);
    REP(i, n) cin >> a[i];
    REP(i, n) cin >> b[i];

    auto bb = b;
    sort(bb.begin(), bb.end());
    bb.erase(unique(bb.begin(), bb.end()), bb.end());
    if (bb.size() == n) {
        cout << "Yes" << endl;
        return 0;
    } else {
        cout << "No" << "\n";
        vector<ll> c(n, a[0]), d(n, a[1]);
        map<ll, ll> im;
        REP(i, n) im[a[i]] = i;
        for (ll bi : b) {
            c[im[bi]] = d[im[bi]] = a[0];
        }
        REP(i, n) cout << c[i] << " \n"[i+1 == n];
        REP(i, n) cout << d[i] << " \n"[i+1 == n];
        cout << flush;
    }

}
accuracy: 1
time_ms: 100
memory_kb: 13168
final_rank: 20