#include <iostream>
#include <cstring>
using namespace std;
const int N = 35;
int pre[N], post[N], loc[N], n;
int l[N], r[N];
bool f = true;
int build(int l1, int r1, int l2, int r2){
if( l1==r1 ) return pre[l1];
int u = pre[l1];
if( pre[l1+1]==post[r2-1] ){
f = false;
l[u] = build(l1+1, r1, l2, r2-1);
}
else{
int t = loc[post[r2-1]];
int sr = r1 - t + 1;
l[u] = build(l1+1, r1-sr, l2, r2-sr-1);
r[u] = build(r1-sr+1, r1, r2-sr, r2-1);
}
return u;
}
void dfs(int u){
if( u==0 ) return;
dfs(l[u]);
if( !f ) f = true;
else printf(" ");
printf("%d", u);
dfs(r[u]);
}
int main(){
scanf("%d", &n);
for( int i=0; i<n; i++ ) scanf("%d", &pre[i]), loc[pre[i]]=i;
for( int i=0; i<n; i++ ) scanf("%d", &post[i]);
build(0, n-1, 0, n-1);
if( f ) puts("Yes");
else puts("No");
f = false;
dfs(pre[0]);
puts("");
return 0;
}