#include <stdio.h>
#include <stdlib.h>
struct node {
    int num;
    struct node* next;
};
int main() {
    int n, i;
    scanf("%d", &n);
    int a[n], b[n];
    struct node *head1 = (struct node*)malloc(sizeof(struct node));//创建两个头指针
    struct node *head2 = (struct node*)malloc(sizeof(struct node));
    struct node *p1=head1,*p2=head2;//分别保存两个头指针的地址
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);//给第一个数组赋值
        head1->next=(struct node*)malloc(sizeof(struct node));//创造节点
        head1->next->num=a[i];//将数组中的值赋到节点中去
        head1=head1->next;
        if(i==n-1) head1->next=NULL;//如果数组中全部值都已经赋到节点中,将最后一个节点的指针初始化
    }
    for(i=0;i<n;i++){
        scanf("%d",&b[i]);
          head2->next=(struct node*)malloc(sizeof(struct node));//同理将数组2的值赋到链表2
        head2->next->num=b[i];
        head2=head2->next;
        if(i==n-1) head2->next=NULL;
    }
    head1=p1;head2=p2;//让头指针重新指向一开始的位置,因为刚才头指针移动了
    while(p1->next){
        p2->next->num+=p1->next->num;//遍历两个链表,并将第一个链表的值赋到第二个链表中去
        p2=p2->next;
        p1=p1->next;
    }
    p2=head2;
    while(p2->next){
        printf("%d ",p2->next->num);//最后输出即可
        p2=p2->next;
    }
    return 0;
}