#include <stdio.h>
#include<stdlib.h>

//单链表
typedef struct DListNode
{
    struct DListNode* next;
    int data;
}LN;

//增加节点
LN* BuyNode(int x)
{
    LN* newnode = (LN*)malloc(sizeof(LN));
    newnode->next = NULL;
    newnode->data = x;

    return newnode;
}

//初始化
LN* InitNode()
{
    LN* phead=BuyNode(0);

    return phead;
}

//尾插
void NodePushBack(LN* phead,int x)
{
    LN* newnode=BuyNode(x);

    LN* cur=phead;
    //如果没有节点直接在头节点后面插入
    if(phead->next==NULL)
    {
        phead->next=newnode;
        return;  //插入后直接退出
    }
    else //如果头节点后面有节点就要找到最后一个节点
    {
        while(cur->next != NULL)
        {
            cur=cur->next;
        }
    }

    cur->next=newnode; //在最后一个节点后面插入
}

//打印
void PrintArray(LN* plist1,LN* plist2)
{
    LN* cur1=plist1->next;//不打印头节点
    LN* cur2=plist2->next;//不打印头节点

    while(cur1 != NULL && cur2 != NULL)
    {
        printf("%d ",cur1->data+cur2->data);
        cur1=cur1->next;
        cur2=cur2->next;
    }
}

int main()
{
    int n;
    scanf("%d ",&n);

    //对a和b数组分别写入
    int* sum=(int*)malloc(sizeof(int)*n);
    int* num=(int*)malloc(sizeof(int)*n);
    for(int i=0;i<n;i++)
    {
        scanf("%d ",&sum[i]);
    }

    for(int i=0;i<n;i++)
    {
        scanf("%d ",&num[i]);
    }

    //对a和b两个链表分别设置个头节点
    LN* plist1=InitNode(); //a
    LN* plist2=InitNode(); //b

    //对a和b两个链表分别录入
    for(int i=0;i<n;i++)
    {
        NodePushBack(plist1,sum[i]);
    }

    for(int i=0;i<n;i++)
    {
        NodePushBack(plist2,num[i]);
    }

    //打印
    PrintArray(plist1,plist2);

    return 0;
}