#include <bits/stdc++.h>
using namespace std;
#include <bits/stdc++.h>
using namespace std;
//高精度减法之后转long long
long long fun(string s1,string s2) {
long long a[250] = {0},b[250] = {0},c[250] = {0};
long long i,len,p = 0,r = 0;
//长的一定大,一样长字典码大的一定大
//"123" "3" "123" "125"
if(s1.size() < s2.size() || (s1.size() == s2.size() && s1 < s2)) {
swap(s1,s2);//直接交换两个变量的值
}
//将s1和s2逆序存入整数数组
for(i = 0; i < s1.size(); i++) {
a[i] = s1[s1.size() - i - 1] - '0';
}
for(i = 0; i < s2.size(); i++) {
b[i] = s2[s2.size() - i - 1] - '0';
}
//逐位相减
len = s1.size();
for(i = 0; i < len; i++) {
//如果不够减,向右借1,当10用
if(a[i] < b[i]) {
a[i + 1] = a[i + 1] - 1;
a[i] = a[i] + 10;
}
c[i] = a[i] - b[i];
}
//从右向左逐位输出,从第一个遇到的非0元素开始输出
for(i = len - 1; i >= 0; i--) {
if(c[i] != 0) {
p = i;
break;
}
}
//逆序从第一个非0元素 输出每一位
//123 -> 321
long long t = 1;
for(i = 0; i <= p; i++) {
r = r + t * c[i];
t = t * 10;
}
return r;
}
//转16进制
string jinzhi(long long n){
string t = "0123456789ABCDEF";
string r = "";
if(n == 0) r = "0";
while(n != 0){
r = t[n%16] + r;
n = n / 16;
}
return r;
}
int main() {
string s1,s2;
cin>>s1>>s2;
cout<<jinzhi(fun(s1,s2));
}
/**************************************************************
Problem: 1731
User: admin
Language: C++
Result: Accepted
Time:28 ms
Memory:2080 kb
****************************************************************/