#include"iostream"
#include"string.h"
#include"math.h"
using namespace std;
const double pi=acos(-1);
struct complex
{
double r,i;
complex(double r=0,double i=0)
{
this->r=r;
this->i=i;
}
};
complex operator + (complex a,complex b)
{
complex ans;
ans.r=a.r+b.r;
ans.i=a.i+b.i;
return ans;
}
complex operator - (complex a,complex b)
{
complex ans;
ans.r=a.r-b.r;
ans.i=a.i-b.i;
return ans;
}
complex operator * (complex a,complex b)
{
complex ans;
ans.r=a.r*b.r-a.i*b.i;
ans.i=a.r*b.i+a.i*b.r;
return ans;
}
void Rader(complex *f,int len)
{
for(int i=1,j=len/2;i<len-1;i++)
{
if(i<j)swap(f[i],f[j]);
int k=len/2;
while(j>=k)
{
j-=k;
k>>=1;
}
if(j<k)j+=k;
}
}
void FFT(complex f[],int len,int on)
{
Rader(f,len);
for(int N=2;N<=len;N<<=1)
{
complex w(cos(-on*2.0*pi/N),sin(-on*2.0*pi/N));
for(int j=0;j<len;j+=N)
{
complex Wn(1,0);
for(int k=j;k-j<N/2;k++)
{
complex t1,t2;
t1=f[k];
t2=f[k+N/2]*Wn;
f[k]=t1+t2;
f[k+N/2]=t1-t2;
Wn=Wn*w;
}
}
}
if(on==-1)
{
for(int i=0;i<len;i++)f[i].r/=1.0*len;
}
}
string operator *(string s1,string s2)
{
int len=1;
while(len<s1.length()+s2.length())len<<=1;
complex f[len],f1[len];
int t=0;
for(int i=s1.length()-1;i>=0;i--)
{
f[t].r=s1[i]-'0';
f[t++].i=0;
}
while(t++<len)f[t].r=f[t].i=0;
t=0;
for(int i=s2.length()-1;i>=0;i--)
{
f1[t].r=s2[i]-'0';
f1[t++].i=0;
}
while(t++<len)f1[t].r=f1[t].i=0;
FFT(f,len,1);
FFT(f1,len,1);
for(int i=0;i<len;i++)f[i]=f[i]*f1[i];
FFT(f,len,-1);
int a[len];
memset(a,0,sizeof(a));
for(int i=0;i<len-1;i++)
{
a[i]+=f[i].r+0.5;
a[i+1]+=a[i]/10;
a[i]%=10;
}
a[len-1]+=f[len-1].r+0.5;
t=len-1;
while(a[t]==0)t--;
string ans;
for(int i=t;i>=0;i--)
{
ans+=a[i]+'0';
}
return ans;
}
int main()
{
string s1,s2;
cin>>s1>>s2;
cout<<s1*s2;
}