#include <iostream>
#include <string>
#include <cstring>
using namespace std;
const int MAXLEN=1000;
int *str_to_int(char *str)
{
int len=strlen(str);
int *a=new int[(len+1)*sizeof(int)];
for(int i=0;i<len;i++) a[i]=(int)str[len-i-1]-'0';
return a;
}
int check(int *a,int n)
{
int k=0,len=n;
while(a[len-1]==0&&len>1) len--;
for(k=0;k<len;k++)
{
if(a[k]>=10)
{
a[k+1]=a[k+1]+a[k]/10;
a[k]=a[k]%10;
}
}
if(a[k]!=0) len=k+1;
return len;
}
char *int_to_str(int *a,int n)
{
int i;
char *str=new char[(n+1)*sizeof(char)];
for(i=0;i<n;i++) str[i]=(char)a[n-1-i]+'0';
str[n]='\0';
return str;
}
char *addition(char *m1,char *m2)
{
int len1,len2,len,c=0;
int *t1,*t2;
len1=strlen(m1);len2=strlen(m2);
len=(len1>=len2)?len1:len2;
t1=new int[(len1+2)*sizeof(int)];
t2=new int[(len2+2)*sizeof(int)];
t1=str_to_int(m1);
t2=str_to_int(m2);
for(int i=len1;i<=len;i++) t1[i]=0;
for(int i=len2;i<=len;i++) t2[i]=0;
for(int i=0;i<len;i++) t1[i]=t1[i]+t2[i];
len=check(t1,len);
return int_to_str(t1,len);
}
char *subtract(char *m1,char *m2)
{
int i, len1,len2,len,c=0,*t1,*t2,cf=0;
char *temp,*csub;
len1=strlen(m1);len2=strlen(m2);
len=len1>=len2?len1:len2;
t1=new int[(len+2)*sizeof(int)];
t2=new int[(len+2)*sizeof(int)];
temp=new char[(len+2)*sizeof(char)];
csub=new char[(len+3)*sizeof(char)];
if((len>len1)||((len2==len1)&&strcmp(m1,m2)<0))
{
strcpy(temp,m1);strcpy(m1,m2);strcpy(m2,temp);
len1=strlen(m1);len2=strlen(m2);
cf=1;
}
t1=str_to_int(m1);t2=str_to_int(m2);
for(i=len1;i<len;i++) t1[i]=0;
for(i=len2;i<len;i++) t2[i]=0;
for(i=0;i<len;i++)
{
if(t1[i]>=t2[i]) t1[i]=t1[i]-t2[i];
else
{
t1[i]=t1[i]-t2[i];
c=(t1[i]*(-1)/10+1);
t1[i]=t1[i]+10*c;
t1[i+1]=t1[i+1]-c;
}
}
int n=i,begin=0;
while(t1[n-1]==0&&n>1) n--;
if(cf==1)
{
csub[0]='-';
n++;begin=1;
}
for(i=begin;i<n;i++)
csub[i]=(char)t1[n-1-i]+'0';
csub[n]='\0';
return csub;
}
char *multiply(char *m1,char *m2)
{
int i,len1,len2,len,j,c=0,*t1,*t2,*prod;
len1=strlen(m1);len2=strlen(m2);
len=len1+len2;
t1=new int[(len1+1)*sizeof(int)];
t2=new int[(len2+1)*sizeof(int)];
prod=new int[(len+1)*sizeof(int)];
t1=str_to_int(m1);t2=str_to_int(m2);
for(i=0;i<len;i++) prod[i]=0;
for(i=0;i<len1;i++)
for(j=0;j<len2;j++)
prod[i+j]=prod[i+j]+t1[i]*t2[j];
len=check(prod,len);
return int_to_str(prod,len);
}
int cmp(char s1[],char s2[])
{
int len1=strlen(s1);
int len2=strlen(s2);
if(len1!=len2)
{
if(len1>len2) return 1;
else return -1;
}
else
{
int ans=strcmp(s1,s2);
if(ans>0) return 1;
else if(ans==0) return 0;
else return -1;
}
}
void divide(char *m1,char *m2,char *remainder,char *quotient)
{
int i,j,k,len,*temp;
int len1=strlen(m1);
int len2=strlen(m2);
char *m3;
if(strcmp(m1,m2)==0)
{
strcpy(quotient,"1");
strcpy(remainder,"0");
}
else
if((len1<len2)||(len1==len2&&strcmp(m1,m2)<0))
{
strcpy(quotient,"0");
strcpy(remainder,m1);
}
else
{
temp=new int[(len2+1)*sizeof(int)];
len=0;
for(i=0;i<len1;i++)
{
temp[i]=0;
remainder[len]=m1[i];
remainder[len+1]='\0';
len=strlen(remainder);
while((len>len2)||(len==len2&&strcmp(remainder,m2)>=0))
{
m3=new char[(len1+1)*sizeof(char)];
memset(m3,0,sizeof(m3));
strcpy(m3,subtract(remainder,m2));
strcpy(remainder,m3);
len=strlen(remainder);
temp[i]++;
}
quotient[i]=temp[i]+'0';
}
j=0;
while((j<len1)&&(quotient[j]=='0')) j++;
for(k=0;k<len1-j;k++) quotient[k]=quotient[k+j];
quotient[len1-j]='\0';
if(remainder[0]==0)
{
remainder[0]='0';
remainder[1]='\0';
}
}
}
int main()
{
char s1[MAXLEN],s2[MAXLEN];
cin>>s1>>s2;
cout<<multiply(s1,s2)<<endl;
return 0;
}