//土尔逊Torson 编写于2023/05/21
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>

using namespace std;

const int MAXN = 10000;

struct BigInteger082 { //定义大数
	int digit[MAXN]; //数字位
	int length;      //大数大小
	BigInteger082();
	BigInteger082 operator=(string str);
	BigInteger082 operator+(const BigInteger082& b);
	friend istream& operator >> (istream& in, BigInteger082& x);
	friend ostream& operator << (ostream& out, const BigInteger082& x);
};

istream& operator >> (istream& in, BigInteger082& x) {//定义输入操作
	string str;
	in >> str;
	x = str; //用定义了的赋值操作符( = )
	return in;
}

ostream& operator << (ostream& out, const BigInteger082& x) {//定义输出操作
	for (int i = x.length - 1; i >= 0; --i) {
		out << x.digit[i];
	}
	return out;
}

BigInteger082::BigInteger082() {//初始化大数
	memset(digit, 0, sizeof(digit));
	length = 0;
}

BigInteger082 BigInteger082::operator=(string str) {//定义 赋值 操作符
	memset(digit, 0, sizeof(digit));
	length = str.size();
	for (int i = 0; i < length; ++i) { //逆向存储大数
		digit[i] = str[length - i - 1] - '0';
	}
	return *this;
}

BigInteger082 BigInteger082::operator+(const BigInteger082& b) {//定义 + 操作符
	BigInteger082 answer;
	int carry = 0;
	for (int i = 0; i < length || i < b.length; ++i) {//两个逆置的大数从低位向高位依次相加
		int current = carry + digit[i] + b.digit[i];  //也就是从digit[0] 到 digit[length-1]
		carry = current / 10;
		answer.digit[answer.length++] = current % 10;
	}
	if (carry != 0) {
		answer.digit[answer.length++] = carry;
	}
	return answer;
}

int main() {
	BigInteger082 a;
	BigInteger082 b;
	while (cin >> a >> b) { //计算大数 a+b 并输出结果
		cout << a + b << endl;
	}
	system("pause");
	return EXIT_SUCCESS;
}
// 64 位输出请用 printf("%lld")