#include <fstream>
#include <string>
#include <vector>
using namespace std;
ifstream fin("adunare.in");
ofstream fout("adunare.out");
const int base= 10000;
string s;
void h_read ( vector <int> &x )
{
fin>>s;
x.resize((s.size()+3)/4);
for ( int i= 0; i<(int)s.size(); ++i ) {
x[((int)s.size()-i-1)/4]= x[((int)s.size()-i-1)/4]*10+s[i]-'0';
}
}
void h_write( vector <int> x ) {
for ( int i= (int)x.size()-1; i>=0; --i ) {
fout<<x[i];
}
}
void hh_add ( vector <int> &x, vector <int> &y )
{
int t= 0;
for ( int i= 0; i<(int)x.size() || i<(int)y.size() || t!=0; ++i ) {
if ( i>=(int)x.size() ) {
x.push_back(t);
} else {
x[i]+= t;
}
if ( i<(int)y.size() ) {
x[i]+= y[i];
}
t= x[i]/base;
x[i]%= base;
}
}
void hh_sub ( vector <int> &x, vector <int> y )
{
for ( int i= 0; i<(int)x.size(); ++i ) {
x[i]-= y[i];
if ( x[i]<0 ) {
x[i]+= base;
--x[i+1];
}
}
while ( x.back()==0 ) {
x.pop_back();
}
}
void hn_mult( vector <int> &x, int y )
{
int t= 0;
for ( int i= 0; i<(int)x.size() || t!=0; ++i ) {
if ( i>=(int)x.size() ) {
x.push_back(0);
}
x[i]= x[i]*y+t;
t= x[i]/base;
x[i]%= base;
}
}
void hn_div (vector <int> &x, int y )
{
for ( int i= (int)x.size()-1; i>=1; --i ) {
x[i-1]+= x[i]%y*base;
x[i]/= y;
}
x[0]/= y;
while ( x.size()>=2 && x.back()==0 ) {
x.pop_back();
}
}
int main( )
{
vector <int> a, b, c;
h_read(a);
c= a;
h_read(b);
hn_mult(a, 17);
hn_mult(b, 16);
hh_add(a, b);
hh_sub(a, c);
hn_div(a, 16);
h_write(a);
return 0;
}