#include <iostream>
#include<math.h>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
const int MAX = 10000;

struct BigInteger {
    int digit[MAX];
    int length;
    BigInteger();
    BigInteger(int x);
    BigInteger(string str);
    BigInteger(const BigInteger& b);
    BigInteger operator=(int x);
    BigInteger operator=(string str);
    BigInteger operator=(const BigInteger& b);
    bool operator<=(const BigInteger& b);
    bool operator==(const BigInteger& b);
    BigInteger operator+(const BigInteger& b);
    BigInteger operator-(const BigInteger& b);
    BigInteger operator*(const BigInteger& b);
    BigInteger operator/(const BigInteger& b);
    BigInteger operator%(const BigInteger& b);
    friend istream& operator>>(iostream& in, BigInteger& x);
    friend ostream& operator<<(ostream& out, const BigInteger& x);
};
BigInteger::BigInteger() {
    memset(digit, 0, sizeof(digit));
    length = 0;
}
bool BigInteger::operator<=(const BigInteger& b) {
    int len = length;
    bool tag = false;
    if (b.length > len) len = b.length;

    for (int i = len - 1; i >= 0; i--) {
        if (digit[i] < b.digit[i]) {
            return true;
        } else if (digit[i] > b.digit[i]) {
            return false;
        } else {
            if (i == len - 1) return true;

        }
    }
    return true;
}
//成功
BigInteger BigInteger::operator+(const BigInteger&
                                 b) { //时刻记得这个不是构造器呜呜
    BigInteger res;
    int carry = 0;
    int length = 0;
    int current = 0;
//    cout<<length;
    for (int i = 0; i < b.length; i++) {
        current = digit[i] + b.digit[i] + carry;
        res.digit[res.length++] = current % 10;
        carry = current / 10;
    }
    return res;
}
//成功
BigInteger BigInteger ::operator=(int x) {
    memset(digit, 0, sizeof(digit));
    length = 0;
    if (x == 0) {
        length++;
    } else {
        while (x) {
            digit[length++] = x % 10;
            x /= 10;
        }
    }
    return *this;
}
BigInteger BigInteger ::operator=(const BigInteger& b) {
    memset(digit, 0, sizeof(digit));
    length = b.length;
//    cout<<length;
    for (int i = 0; i < b.length; i++) {
        digit[i] = b.digit[i];
    }
    return* this;
}
//成功
BigInteger ::BigInteger(int x) {
    memset(digit, 0, sizeof(digit));
    length = 0;
    while (x) {
        digit[length++] = x % 10;
        x /= 10;
    }
}
//成功
BigInteger ::BigInteger(const BigInteger& b) { //构造器
    memset(digit, 0, sizeof(digit));
    length = b.length;
    for (int i = 0; i < length; i++) {
        digit[i] = b.digit[i];
    }
}
//成功
ostream& operator<<(ostream& out, const BigInteger& x) { //注意用别名
    for (int i = x.length - 1; i >= 0; i--) {
        out << x.digit[i];
    }
    return out;
}
//成功
BigInteger::BigInteger(string str) {
    memset(digit, 0, sizeof(digit));
    length = str.size();
//    cout<<length;
    for (int i = length - 1; i >= 0; i--) {

//            cout<<"\n"<<str[i]-'0'<<"\n";
        digit[length - i - 1] = str[i] - '0'; //别忘减去'0'
//            cout<<"j="<<j<<" digit[j]="<<digit[j]<<"\n"<<"i="<<i<<" str[i]="<<str[i]<<"\n";
    }
//       for(int i=length-1;i>=0;i--){
//            cout<<digit[i];
//        }


}
//istream & operator>>(iostream& in,BigInteger& b){
//    string str;
//    in>>str;
//    b=str;
//    return in;
//}
//BigInteger BigInteger::operator-(){}
int main() {
//    string strtest;
//    cin>>strtest;
//    cout<<strtest;
//    string str="892";
//    BigInteger testRes0=str;
//    cout<<testRes0;
//    int a0=297;
//    int b0=233;
//    BigInteger testRes1=a0;
//    BigInteger testRes2=b0;
////    cout<<testRes1;
//    BigInteger res=testRes1+testRes2;
//    cout<<res;
    string a, b;
    while (cin >> a >> b) {
        BigInteger a1 = a;
        BigInteger b1 = b;
        BigInteger answer;
        if (a1 <= b1) {
            answer = a1 + b1;
        } else {
            answer = b1 + a1;
        }

//    cout<<answer.length;
        cout << answer;
    }
    return 0;
}