#include <iostream>
#include <string>
#include <cstring>

#define LONG_INT_LENGTH 100
#define LONG_INT_BASE   10

struct BigInt {
	int length;
    int digits[LONG_INT_LENGTH];
	BigInt();
	BigInt(int size);
};

BigInt::BigInt()
{
	std::memset(digits, 0, LONG_INT_LENGTH * sizeof(int));
	length = LONG_INT_LENGTH;
}

BigInt::BigInt(int size)
{
	std::memset(digits, 0, LONG_INT_LENGTH * sizeof(int));
	length = size;
}

BigInt operator + (const BigInt& a, const BigInt& b)
{
	BigInt result(std::max(a.length, b.length));

	int carry = 0;
	for (int i = 0; i < result.length || carry; i++)
	{
		result.digits[i] = a.digits[i] + b.digits[i] + carry;
		if (result.digits[i] >= LONG_INT_BASE)
		{
			result.digits[i] -= LONG_INT_BASE;
			carry = 1;
		}
		else
			carry = 0;
	}

	if (result.digits[result.length])
		result.length++;

	return result;
}

std::istream& operator >> (std::istream& is, BigInt& n)
{
	std::string str;
	is >> str;
	for (int i = 0; i < str.size(); i++)
    {
      n.digits[str.size() - i - 1] = str[i] - '0';
    }
    n.length = str.size(); 
	return is;
}

std::ostream& operator << (std::ostream& os, BigInt& n)
{
	for (int i = n.length - 1; i >= 0; i--)
    {
      std::cout << n.digits[i];
    }
	return os;
}


int main()
{
	BigInt a, b, c;
	std::cin >> a >> b;
	c = a + b;
	std::cout << c << std::endl;

	return 0;
}