#include<bits/stdc++.h>
using namespace std;
#define debug(a) cout<<a<<" "
const int N=1e5+100; // 定义一个较大的数组大小,用于存储大整数
string s1,s2; // 用于输入两个字符串形式的大整数
int a[N],b[N],c[N],ans,ma; // a 和 b 存储两个大整数的每一位数字,c 存储结果,ans 用于进位,ma 记录较大数的位数
int main()
{
cin>>s1>>s2; // 输入两个大整数(以字符串形式)
int j=1,k=1;
// 将字符串 s1 的每一位数字从低位到高位存入数组 a
for(int i=s1.size()-1;i>=0;i--) a[j++]=s1[i]-'0';
// 将字符串 s2 的每一位数字从低位到高位存入数组 b
for(int i=s2.size()-1;i>=0;i--) b[k++]=s2[i]-'0';
// 获取两个大整数的最大长度
ma=max(s1.size(),s2.size());
// 模拟竖式加法,逐位相加并处理进位
for(int i=1;i<=ma;i++)
{
ans+=a[i]+b[i]; // 当前位相加,并加上上一位的进位
c[i]=ans%10; // 当前位的结果是相加后的个位数
ans/=10; // 更新进位值
}
// 如果最高位仍有进位,则需要额外增加一位
if(ans) c[++ma]=ans;
// 从高位到低位输出结果
for(int i=ma;i>=1;i--)
cout<<c[i];
return 0;
}