struct num
{
    int n;
    struct num* next;
    struct num* ahead;
};
struct num* phead1;       //????
struct num* phead2;       //????
struct num* phead3;       //????
struct num* p1;
struct num* p2;
void create(struct num** phead,int n)//???????????
{
    int i=0;
    p1=(struct num*)malloc(sizeof(struct num));
    p1->n=0;
    *phead=p2=p1;
    (*phead)->ahead=NULL;
    for(i=0;i<=n-2;i++)
    {
        p1=(struct num*)malloc(sizeof(struct num));
        p1->n=0;
        if(i==0)
        {
            (*phead)->next=p1;
            p1->ahead=(*phead);
        }
        else
        {
            p2->next=p1;
            p1->ahead=p2;
        }
        p2=p1;
    }
    p2->next=NULL;
}

int main()
{
    char num1[10000];
    char num2[10000];
    //printf("Please input the first integer\n");
    scanf("%s",num1);
    //printf("Please input the next integer\n");
    scanf("%s",num2);
    if(num1[0]!='-'&&num2[0]!='-')
    {
        int i1=0;
        int i2=0;
        int max;
        while(num1[i1]!='\0')
        {
            i1++;
        }
        while(num2[i2]!='\0')
        {
            i2++;
        }
        if(i1>=i2)
        {
            max=i1;
        }
        else
        {
            max=i2;
        }                         //????????????????
        create(&phead1,max);      //?????????max?max?max+1???
        create(&phead2,max);
        create(&phead3,max+1);
        struct num* ptemp1=phead1;
        struct num* ptemp2=phead2;
        int i3;
        for(i3=i1-1;i3>=0;i3--)
        {
            ptemp1->n=num1[i3]-'0';
            ptemp1=ptemp1->next;
        }
        int i4;
        for(i4=i2-1;i4>=0;i4--)
        {
            ptemp2->n=num2[i4]-'0';
            ptemp2=ptemp2->next;
        }                         //????????????
        struct num* ptemp3=phead1;
        struct num* ptemp4=phead2;
        struct num* ptemp5=phead3;
        while(ptemp3!=NULL)
        {
            if(((ptemp3->n)+(ptemp4->n)+(ptemp5->n))>=10)
            {
                 ptemp5->n=ptemp5->n+((ptemp3->n)+(ptemp4->n))-10;
                 ptemp3=ptemp3->next;
                 ptemp4=ptemp4->next;
                 ptemp5=ptemp5->next;
                 ptemp5->n=(ptemp5->n)+1;
            }
           else
           {
               ptemp5->n=ptemp5->n+(ptemp3->n)+(ptemp4->n);
               ptemp3=ptemp3->next;
               ptemp4=ptemp4->next;
               ptemp5=ptemp5->next;
           }
        }                       //???????????????????????
        struct num* ptemp7=phead3;
        while(ptemp7->next!=NULL)
        {
            ptemp7=ptemp7->next;
        }
        //printf("the answer is:\n");
        if(ptemp7->n==0)
        {
            ptemp7=ptemp7->ahead;
            if(ptemp7->ahead==NULL)
            {
                printf("0");
                return 0;
            }
            else
            {
                while(ptemp7->n==0)
                {
                    ptemp7=ptemp7->ahead;
                }
                while(ptemp7!=NULL)
                {
                    printf("%d",ptemp7->n);
                    ptemp7=ptemp7->ahead;
                }
            }
        }
        else
        {
            while(ptemp7!=NULL)
            {
                printf("%d",ptemp7->n);
                ptemp7=ptemp7->ahead;
            }
        }

    }
    struct num* release1=phead1;//???????free???
    struct num* release2=phead2;
    struct num* release3=phead3;
    while(phead1->next!=NULL)
    {
        release1=phead1;
        phead1->next=(phead1->next)->next;
        free(release1->next);
    }
    free(phead1);
    while(phead2->next!=NULL)
    {
        release2=phead2;
        phead2->next=(phead2->next)->next;
        free(release2->next);
    }
    free(phead2);
    while(phead3->next!=NULL)
    {
        release3=phead3;
        phead3->next=(phead3->next)->next;
        free(release3->next);
    }
    free(phead3);
    return 0;
}
