#include<bits/stdc++.h>
using namespace std;
int h(int len,int i,vector<short> b){
	if(len<=i) return 0;
	return b[i];
}
struct Bigint{
	vector<short> b;
	bool op;int len,base;
	Bigint(){
		b.clear();
		op=true;
		len=0;
		base=10;
	}
	friend ostream & operator<<(ostream & out,const Bigint & a);
	friend istream & operator>>(istream & in,Bigint & a);
	bool operator>(Bigint a){
		if(a.len>len) return false;
		if(a.len<len) return true;
		for(int i=0;i<a.len;i++){
			if(b[i]>a.b[i]) return true;
			if(b[i]<a.b[i]) return false;
		}
		return false;
	} 
	bool operator<(Bigint a){
		if(a.len<len) return false;
		if(a.len>len) return true;
		for(int i=0;i<a.len;i++){
			if(b[i]>a.b[i]) return false;
			if(b[i]<a.b[i]) return true;
		}
		return false;
	}
	bool operator==(Bigint a){
		if(a.len!=len) return false;
		for(int i=0;i<a.len;i++){
			if(b[i]!=a.b[i]) return false;
		}
		return true;
	}
	bool operator>=(Bigint a){
		if(a.len>len) return false;
		if(a.len<len) return true;
		for(int i=0;i<a.len;i++){
			if(b[i]>a.b[i]) return true;
			if(b[i]<a.b[i]) return false;
		}
		return true;
	}
	bool operator<=(Bigint a){
		if(a.len<len) return false;
		if(a.len>len) return true;
		for(int i=0;i<a.len;i++){
			if(b[i]>a.b[i]) return false;
			if(b[i]<a.b[i]) return true;
		}
		return true;
	}
	bool operator!=(Bigint a){
		if(a.len!=len) return true;
		for(int i=0;i<a.len;i++){
			if(b[i]!=a.b[i]) return true;
		}
		return false;
	}
	Bigint operator+(Bigint a){
		Bigint c;
		if((a.op==false||op==false)&&(a.op!=op)){
			return *this-a;
		}
		else{
			for(int i=0,t=0;i<(a.len>len?a.len:len)||t!=0;i++){
				if(i>=(a.len>len?a.len:len)){
					c.b.push_back(t%base);
					t=t/base;	
				}
				else{
					c.b.push_back((((h(len,i,b))+(h(a.len,i,a.b))+t)%base));
					t=((h(len,i,b))+(h(a.len,i,a.b)+t))/base;	
				}
				c.len++;
			}
		}
		return c; 
	}
	Bigint operator-(Bigint a){
		Bigint c;
		if(*this<a){
			op=!op;
			return *this+a;
        }
        if(*this==a){
        	return c;
		}
		for(int i=0,t=0;i<max(a.len,len);i++){
			if(i>=max(a.len,len)){
				if(b[i]-t<a.b[i]){
					t=1;
					b[i]+=10-t;
				}
				else t=0;
				c.b.push_back(b[i]-a.b[i]);
				cout<<b[i]-a.b[i];
			}
		}
		return c;
	}
	Bigint operator*(Bigint a){
		Bigint c;int m;
		if(op==false||a.op==false&&!op==a.op) {
			op=false;
		}
		else{
			op=true;
		}
		for(int i=0;i<max(len,a.len);i++){
			if(b[i]!=0||a.b[i]!=0){
				m=i;
				break;
			}
			if(b[i]==0){
				c.b.push_back(0);
			}
			if(a.b[i]==0){
				c.b.push_back(0);
			}
		}
		for(int j=m,t=0;j<len||t!=0;j++){
			for(int k=m;k<a.len||t!=0;k++){
				if(h(max(len,a.len),j+k-1,b)!=0){
					c.b.push_back((h(len,j,b)*h(a.len,k,a.b)+t)%base);
					t=(h(len,j,b)*h(a.len,k,a.b)+t)/base;
					c.len++;		
				}
				else{
					c.b[c.len-j-k]=(c.b[j+k]+h(len,j,b)+h(a.len,k,a.b)+t)%base;
					t=(c.b[j+k]+h(len,j,b)*h(a.len,k,a.b)+t)/base;
				}
				cout<<c<<endl;
			}
		}
		return c;
	}
	Bigint operator/(Bigint a){
		Bigint c;
		if(a>=*this) return c;
	} 
	Bigint operator%(Bigint a){
		if(*this<=a) return *this;
		
	}
	Bigint operator=(string s){
		b.clear();
		len=s.size();
		if(s[0]=='-'){
			len--;
			op=false;
		}
		for(int i=0;i<len;i++){
			if(s[i]>='0'&&s[i]<='9'){
				b.push_back(s[i]-'0');	
			}
			else{
				b.push_back(s[i]-'A'+10);
			}
		} 
		return *this;
	}
	Bigint operator+=(string s){
		Bigint c;
		c=s;
		*this=*this+c;
		return *this;
	}
	Bigint operator-=(string s){
		Bigint c;
		c=s;
		*this=*this-c;
		return *this;
	}
	Bigint operator*=(string s){
		Bigint c;
		c=s;
		*this=*this*c;
		return *this;
	}
	Bigint operator/=(string s){
		Bigint c;
		c=s;
		*this=*this/c;
		return *this;
	}
	Bigint operator%=(string s){
		Bigint c;
		c=s;
		*this=*this%c;
		return *this;
	}
	void Binray(int a){
		base=a;
		return; 
	}
	bool palindromes(){
		int i;
		for(i=0;i<len/2;i++){
			if(b[i]!=b[len-i-1]) return false;
		}
		return true;
	}
};
istream &operator>>(istream & in,Bigint & a){
	string s;
	int i,j=0;
	in>>s;
	a.len=s.size(); 
	if(s[0]=='-'){
		a.len--;
		a.op=false;
		j++;
	}
	for(i=a.len-1;i>=j;i--){
		if(s[i]>='0'&&s[i]<='9'){
			a.b.push_back(s[i]-'0');	
		}
		else{
			a.b.push_back(s[i]-'A'+10);
		}
	}
	return in;
}
ostream &operator<<(ostream &out,const Bigint & a){
	if(a.op==false) putchar('-');
	for(int i=a.b.size()-1;i>=0;i--){
		if(a.b[i]<10){
			out<<a.b[i];	
		}
		else{
			out<<char('A'+a.b[i]-10);
		}
	}
	return out;
} 
int main(){
	Bigint a,b;
	a.Binray(10);
	cin>>a>>b;
	cout<<a-b;
	return 0;
}

#pragma GCC target("avx")
#pragma GCC optimize(2,3,"Ofast","inline","-ffast-math")
#pragma GCC target("sse2,sse3,sse4,mmx")
#pragma omp parallel for
#pragma omp parallel num_threads(thread_count)
#pragma omp critical
#pragma omp parallel for reduction(+:sum)
#include<bits/stdc++.h>
using namespace std;
struct Bigint{
short index[205]={};
int len;
Bigint(string s="0"){
for(int i=s.size()-1,j=0;i>=0;i--,j++)
index[j]=(s[i]-'0');
len=strlen(index);
}
// Bigint operator[](int _index){
//     retur index[_index];
// }
friend ostream & operator<<(ostream & out,const Bigint & a);
friend istream & operator>>(istream & in,Bigint & a);
Bigint operator+(Bigint a){
Bigint c;
int _len=max(len,a.len),j=0;
if(a.index[0]+index[0]>9) j++;
for(int i=_len-1;i>=0;i++){
c.index[i+j]=index[i]+a.index[i];
if(c.index[i+j]>9){
c.index[i-1+j]=(c.index[i+j]%10);
c.index[i+j]%=10;
}
}
c.len=strlen(c.index);
return c;
}
Bigint operator*(Bigint a){
Bigint c;
int _len=a.len+len,i,j;
for(i=len;i>=0;i--)
}
};
ostream & operator<<(ostream & out,const Bigint & a){
for(int i=a.len-1;i>=0;i--){
out<<a.index[i];
}
return out;
}
istream & operator>>(istream & in,Bigint & a){
string s;
in>>s;
a.len=s.size()
for(int i=a.len-1,j=0;i>=0;i++,j++){
a.index[j]=(s[i]-'0');
}
return in;
}
int main(){

return 0;


}