#include
static int c = 0;
int Find(int sum,int pos[],int in[],int N,int length){
int sum_ = 0,i,i_;
int count = 0;
for(i = 0,i_ = 0;i < N;i++){
if(!sum_){
i = i_;
i_++;
}
count++;
sum_ += pos[i];
if(sum_ == sum&&count == length)
break;
else if((count == length&&sum_ != sum)||sum_ > sum)
sum_ = count = 0;
}
for(i_ = 0;pos[i] != in[i_];i_++);
return i_;
}
void gx(int low,int high,int mid,int pos[],int in[],int N){
int sum = 0,i;
c++;
if(c != N)
printf("%d ",in[mid]);
else
printf("%d",in[mid]);
if(low < mid){
for(i= 0;low+i < mid;i++)
sum += in[low+i];
gx(low,mid-1,Find(sum,pos,in,N,i),pos,in,N);
}
sum = 0;
if(high > mid){
for(i= 1;mid+i <= high;i++)
sum += in[mid+i];
gx(mid+1,high,Find(sum,pos,in,N,i-1),pos,in,N);
}
}
int main()
{
int N;
scanf("%d",&N);
int in[N];
int pos[N];
int i,i_;
for(i = 0;i < N;i++)
scanf("%d",&pos[i]);
for(i = 0;i < N;i++)
scanf("%d",&in[i]);
printf("Preorder: ");
for(i = 0;pos[N-1] != in[i];i++);
gx(0,N-1,i,pos,in,N);
}



