#include <bits/stdc++.h>
using namespace std;
int main()
{
string a, b; // 存储两个待相加的大数字符串(可能超过整型范围)
cin >> a >> b;
string ans = ""; // 存储相加结果的字符串(初始为空)
int n = a.size();
int m = b.size();
int i = n - 1, j = m - 1; // 指针i指向a的最后一位(低位),j指向b的最后一位(低位)
int add = 0; // 进位标志(初始为0,无进位)
// 循环条件:i未遍历完a,或j未遍历完b,或仍有进位需要处理(三者满足其一则继续)
while (i >= 0 || j >= 0 || add)
{
// 取出a的当前位数字(若i有效,取a[i]的数值;否则取0)
int x = (i >= 0) ? (a[i] - '0') : 0;
// 取出b的当前位数字(若j有效,取b[j]的数值;否则取0)
int y = (j >= 0) ? (b[j] - '0') : 0;
// 计算当前位的和(包括进位):x(a的当前位) + y(b的当前位) + add(进位)
int res = x + y + add;
// 将当前位的个位存入结果(例如和为15,则存5,进位1)
ans.push_back(res % 10 + '0'); // res%10得到个位,转换为字符存入ans
add = res / 10; // 更新进位(res/10得到十位,作为下一轮的进位)
i -= 1;
j -= 1;
}
// 反转结果字符串:因为相加时是从低位到高位存储(例如先存个位、十位、百位),反转后变为高位到低位(正确顺序)
reverse(ans.begin(), ans.end());
cout << ans;
return 0;
}