#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
****************************************************************/