#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;
}