#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=1000;
struct BigNum{
int num[M+10],len;
void clean(){
memset(num,0,sizeof(num));
len=1;
}
void read(){
char str[M+10];
scanf("%s",str);
len=strlen(str);
for(int i=1;i<=len;i++) num[i]=str[len-i]-'0';
}
void print(){
for(int i=len;i>=1;i--) printf("%d",num[i]);
cout<<endl;
}
void itoBig(int x){
clean();
while(x!=0){
num[len++]=x%10;
x/=10;
}
if(len!=1) len--;
}
bool operator <(const BigNum &tmp) const {
if(len!=tmp.len) return len<tmp.len;
for(int i=len;i>=1;i--) if(num[i]!=tmp.num[i])
return num[i]<tmp.num[i];
return false;
}
bool operator >(const BigNum &tmp) const{return tmp<*this;}
bool operator <=(const BigNum &tmp) const{return !(tmp>*this);}
bool operator >=(const BigNum &tmp) const{return !(tmp<*this);}
bool operator ==(const BigNum &tmp) const{return !(tmp>*this||*this>tmp);}
bool operator !=(const BigNum &tmp) const{return tmp>*this||*this>tmp;}
BigNum operator + (const BigNum &A) const {
BigNum S;
S.clean();
S.len=max(len,A.len);
for(int i=1;i<=S.len;i++){
S.num[i]+=num[i]+A.num[i];
if(S.num[i]>=10){
S.num[i]-=10;
S.num[i+1]++;
}
}
while(S.num[S.len+1]) S.len++;
return S;
}
};
int main(){
BigNum a,b;
a.read();
b.read();
BigNum ans=a+b;
ans.print();
return 0;
}