#include<bits/stdc++.h>
using namespace std;
#define ws 100007
const int maxw=9; //maxw表示每一位的最大数,不同进制可以不同表示
struct Big{
int a[ws],len;
bool flag;
}a,b,c;
Big clr(){
Big x;
memset(x.a,0,sizeof(x.a));
x.flag=x.len=0;
return x;
}
Big init(string s){
Big x;
x.len=s.length();
if(s[0]=='-') x.flag=1;
else x.a[x.len]=s[0]-'0';
for(int i=x.len-1;i>=1;i--) x.a[x.len-i]=s[i]-'0';
return x;
}
Big cpy(Big y){
Big x;
x.len=y.len;
x.flag=y.flag;
for(int i=1;i<=x.len;i++) x.a[i]=y.a[i];
return x;
}
Big add(Big x,Big y){
Big z;
z.len=max(x.len,y.len);
for(int i=1;i<=z.len;i++){
z.a[i]+=x.a[i]+y.a[i];
z.a[i+1]+=z.a[i]/(maxw+1);
z.a[i]%=(maxw+1);
}
while(z.a[z.len+1]){
z.len++;
z.a[z.len+1]=z.a[z.len]/(maxw+1);
z.a[z.len]%=(maxw+1);
}
return z;
}
int cmp(Big x,Big y){ //-1:x<y 0:x==y 1:x>y
if(x.len>y.len) return 1;
if(x.len<y.len) return -1;
for(int i=x.len;i>0;i--){
if(x.a[i]>y.a[i]) return 1;
if(x.a[i]<y.a[i]) return -1;
}
return 0;
}
Big sub(Big x,Big y){
Big z;
if(cmp(x,y)<0){
z=cpy(x);
x=cpy(y);
y=cpy(z);
z.flag=1;
}
memset(z.a,0,sizeof(z.a));
z.len=x.len;
for(int i=1;i<=x.len;i++){
z.a[i]+=x.a[i]-y.a[i];
if(z.a[i]<0){
z.a[i]+=10;
z.a[i+1]--;
}
}
while(!z.a[z.len]) z.len--;
return z;
}
int main(){
string a,b;
cin >> a >> b;
Big x=init(a),y=init(b);
Big z=sub(x,y);
for(int i=z.len;i>0;i--) cout << z.a[i];
}