#include <bits/stdc++.h>
const int N = 1e6 + 33, inf = 2e9, L = 1e5 + 33;
class Z {
public:
bool f;
vector<int> a;
Z() {
a.resize(L);
fr(i, 0, L - 1) {
a[i] = 0;
}
f=false;
}
void c() {
auto m=[](int x){
if((x%=10)<0){
x+=10;
}
return x;
};
int x = 0, y;
fr(i, 0, L - 1) {
a[i] = a[i]+ x;
x=(a[i]-m(a[i]))/10;
a[i]=m(a[i]);
}
}
int&at(int i) {
return a[i];
}
void print(){
int l=L-1;
while(l!=0&&a[l]==0)l--;
if(f)pt("-");
rf(i,l,0){
pt("%d",a[i]);
}
pt("\n");
}
void add(Z v){
auto&b = v.a;
fr(i, 0, L - 1) {
a[i] += b[i];
}
}
void minu(Z v){
auto&b = v.a;
fr(i, 0, L - 1) {
a[i] -= b[i];
}
}
};
int operator^(Z u,Z v);
Z operator-(Z t);
Z operator-(Z t){db
t.f=!t.f;
return t;
}
Z zpz(Z u,Z v){db
u.add(v);
u.c();
return u;
}
Z zmzz(Z u,Z v){db
u.minu(v);
u.c();
return u;
}
Z zmz(Z u,Z v){
return (u^v)>=0?zmzz(u,v):-zmzz(v,u);
}
Z operator+(Z u, Z v) {db
int z=u.f*2+v.f;
if(z==0)return zpz(u,v);//00 a+b=a+b
if(z==1)return zmz(u,-v);//01 a+ -b = a-b
if(z==2)return zmz(v,u);//10 -a + b=b-a
if(z==3)return -zpz(-u,-v);//11 -a + -b = -(a+b)
}
int operator^(Z u,Z v){// 1 greater 0equal -1 less
if(u.f!=v.f){
return u.f==0?1:-1;
}
rf(i,L-1,0){
if(u.at(i)!=v.at(i)){
return u.at(i)>v.at(i)?1:-1;
}
}
return 0;
}
Z operator-(Z u,Z v){db
return u+(-v);
}
Z a, b;
char tmp[L];
int main() {
{
scanf("%s", tmp);
int n = strlen(tmp);
reverse(tmp + 0, tmp + n);
fr(i, 0, n - 1) {
a.at(i) = tmp[i]-'0';
}
}
{
scanf("%s",tmp);
int n=strlen(tmp);
reverse(tmp+0,tmp+n);
fr(i,0,n-1){
b.at(i)=tmp[i]-'0';
}
}
(a-b).print();
return 0;
}