#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void addint(char str1[], char str2[]) {
int n1 = strlen(str1);
int n2 = strlen(str2);
int flag = n1>n2;
int n_max = flag?n1:n2;
int n_min = flag?n2:n1;
int int1[n_max];
int int2[n_max];
if(flag)
{
memset(int2, 0, sizeof(int2)); //初始化数组置零
}else {
memset(int1, 0, sizeof(int1));
}
for(int i=0;i<n1;i++) int1[i] = str1[n1-1-i]-'0'; //将字符串转换为整形并倒置顺序
for(int i=0;i<n2;i++) int2[i] = str2[n2-1-i]-'0';
int*result = (int*)malloc(sizeof(int)*(n_max+1)); //n_max+1是为了储存最高位的进位
result[n_max] = 0; //首尾初始化为0
result[0] = 0;
for(int i =0;i<n_max;i++)
{
if(result[i]+int1[i]+int2[i]>=10) //如果有进位
{
result[i] = (result[i]+int1[i]+int2[i])%10; //本位对10取余
result[i+1] = 1; //下一位初始化为1表示进位
}
else{
result[i] = result[i] + (int1[i]+int2[i]);
result[i+1] = 0; //没有进位则下一位初始化为0
}
}
if(result[n_max]==0) //最高位为0,则从最高位的前一位往前开始输出
{
for(int i = n_max-1;i>=0;i--)
{
printf("%d",result[i]);
}
}else if(result[n_max] == 1) //最高位为1,则从最高位开始输出
{
for(int i = n_max;i>=0;i--)
{
printf("%d",result[i]);
}
}
}
int main() {
char str1[10000];
char str2[10000];
while(~scanf("%s",str1))
{
scanf("%s",str2);
addint(str1,str2);
}
}