#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <functional>
#include <climits>
#define quickio ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl "\n"
using namespace std;
typedef long long ll;
int A[10088];
int B[10088];
int C[10088];
int len_a, len_b, len_c;
bool GetFlag(string a, string b)
{
if (len_a != len_b)
return len_b > len_a;
for (int i = 0; i < len_a; i++)
{
if (a[len_a - 1 - i] < b[len_a - 1 - i])
return true;
}
return false;
}
void Sub()
{
for (int i = 0; i < len_c; i++)
{
C[i] += A[i] - B[i];
if (C[i] < 0)
{
C[i] = A[i] + 10 - B[i];
C[i + 1]--;
}
}
while (len_c > 1 && C[len_c - 1] == 0)
len_c--;
}
int main()
{
string a, b;
cin >> a;
cin >> b;
len_a = a.size();
len_b = b.size();
len_c = max(len_a, len_b);
for (int i = 0; i < len_a; i++)
{
A[len_a - 1 - i] = a[i] - '0';
}
for (int i = 0; i < len_b; i++)
{
B[len_b - 1 - i] = b[i] - '0';
}
int flag = 0;
if (GetFlag(a, b))
{
flag = 1;
swap(A, B);
swap(len_a, len_b);
}
Sub();
if (flag)
cout << "-";
for (int i = 0; i < len_c; i++)
{
cout << C[len_c - 1 - i];
}
cout << endl;
return 0;
}