#include <cstdio>
#include <algorithm>
using namespace std;
class T_heap {
private:
int heap[500001],n;
public:
void up(int now)
{
if(now<=1) return ;
int front=now>>1;
if(heap[front]>heap[now])
{
swap(heap[front],heap[now]);
up(front);
}
}
void down(int now)
{
if(now>n) return;
int vlc,vrc,next=now;
bool blc,brc;
if((now<<1)<=n) blc=true,vlc=heap[now<<1];
else blc=false;
if((now<<1|1)<=n) brc=true,vrc=heap[now<<1|1];
else brc=false;
if(blc)
{
if(vlc<heap[next])
{
next=now<<1;
}
}
if(brc)
{
if(vrc<heap[next])
{
next=now<<1|1;
}
}
if(next!=now)
{
swap(heap[next],heap[now]);
down(next);
}
}
void push(int cur_)
{
n++;
heap[n]=cur_*-1;
up(n);
}
void pop()
{
heap[1]=heap[n];
n--;
down(1);
}
int top()
{
return heap[1]*-1;
}
};
class T_heap que;
int n,if_z,ai[100001],bi[100001];
char Cget;
inline void read_int(int &now)
{
now=0,if_z=1;Cget=getchar();
while(Cget>‘9‘||Cget<‘0‘)
{
if(Cget==‘-‘) if_z=-1;
Cget=getchar();
}
while(Cget<=‘9‘&&Cget>=‘0‘)
{
now=now*10+Cget-‘0‘;
Cget=getchar();
}
now*=if_z;
}
int main()
{
read_int(n);
for(int i=1;i<=n;i++)
{
read_int(ai[i]);
}
sort(ai+1,ai+n+1);
for(int i=1;i<=n;i++)
{
read_int(bi[i]);
que.push(ai[1]+bi[i]);
}
sort(bi+1,bi+n+1);
for(int i=2;i<=n;i++)
{
int top_=que.top();
for(int j=1;j<=n;j++)
{
if(ai[i]+bi[j]<top_)
{
que.pop();
que.push(ai[i]+bi[j]);
top_=que.top();
}
else break;
}
}
for(int i=n;i>=1;i--)
{
ai[i]=que.top();
que.pop();
}
for(int i=1;i<=n;i++) printf("%d ",ai[i]);
return 0;
}