#include <stdio.h>
#include <string.h>
typedef struct
{
int num[11000];
int len;
int neg;
}BIGINT;
BIGINT str2int(char* p);
BIGINT add(BIGINT a,BIGINT b);
BIGINT sub(BIGINT a,BIGINT b);
BIGINT mul(BIGINT a,BIGINT b);
int main()
{
char sa[11000],sb[11000];
scanf("%s %s",sa,sb);
BIGINT ia=str2int(sa),ib=str2int(sb);
BIGINT ans=mul(ia,ib);
if(ans.neg) printf("-");
for(int i=ans.len-1;i>=0;i--) printf("%d",ans.num[i]);
}
BIGINT str2int(char* p)
{
BIGINT ans={{0},0,0};
for(int i=strlen(p)-1;i>=0;i--)
{
ans.num[ans.len++]=p[i]-'0';
}
return ans;
}
BIGINT add(BIGINT a,BIGINT b)
{
int len=a.len>b.len?a.len:b.len;
BIGINT ans={{0},len,0};
int temp,carry=0;
for(int i=0;i<len;i++)
{
temp=a.num[i]+b.num[i]+carry;
ans.num[i]=temp%10;
carry=temp/10;
}
if(carry)
{
ans.num[len]=carry;
ans.len=len+1;
}
return ans;
}
BIGINT sub(BIGINT a,BIGINT b)
{
BIGINT ans={{0},a.len>b.len?a.len:b.len,0};
if(a.len<b.len)
{
ans=sub(b,a);
ans.neg=1;
return ans;
}
else if(a.len==b.len)
{
for(int i=a.len-1;i>=0;i--)
{
if(a.num[i]<b.num[i])
{
ans=sub(b,a);
ans.neg=1;
return ans;
}
}
}
int temp,carry=0;
for(int i=0;i<a.len;i++)
{
temp=a.num[i]-b.num[i]-carry;
carry=temp<0?1:0;
ans.num[i]=(temp+10)%10;
}
ans.len=a.len>b.len?a.len:b.len;
while(ans.num[ans.len-1]==0&&ans.len>1) ans.len--;
return ans;
}
BIGINT mul(BIGINT a,BIGINT b)
{
BIGINT c={{0},a.len+b.len,0};
int temp=0,carry=0;
for(int i=0;i<a.len;i++)
{
for(int j=0;j<b.len;j++)
{
temp=a.num[i]*b.num[j]+carry+c.num[i+j];
c.num[i+j]=temp%10;
carry=temp/10;
}
c.num[i+b.len]=carry;
}
c.len=a.len+b.len;
while(c.num[c.len-1]==0&&c.len>1) c.len--;
return c;
}