#include<stdio.h>
#include<algorithm>
#include<vector>
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
const int MAXN = 2007;
struct BigNum
{///数值保存从0位开始
int num[MAXN];///数值,逆序保存
int op;///表示符号位,1表示正数,-1表示负数
int size;///数的位数
BigNum(){
size=1, op=1;
memset(num, false, sizeof(num));
}
void Cin()
{
char s[MAXN];
scanf("%s", s);
size = strlen(s);
for(int i=0, k=size-1; i<size; i++)
{
if(s[i]=='-')
{
k--;
op = -1;
}
else
num[k--] = s[i] - '0';
}
if(op == -1)
size--;
}
bool operator <= (const BigNum &b)const
{///去符号比较大小
if(size > b.size)return false;
if(size < b.size)return true;
for(int i=size-1; i>=0; i--)
{
if(num[i] > b.num[i])return false;
if(num[i] < b.num[i])return true;
}
return true;
}
void operator = (const BigNum &b)
{
size = b.size, op=b.op;
for(int i=0; i<b.size; i++)
num[i] = b.num[i];
}
void operator = (const int &b)
{
int x = b;
if(x < 0)
{
op = -1;
x = -x;
}
size = 0;
do
{
num[size++] = x % 10;
x /= 10;
}
while(x);
}
BigNum operator * (const BigNum &b)const
{
BigNum res;
res.op = b.op * op;
res.size = size + b.size - 1;
for(int i=0; i<b.size; i++)
for(int j=0; j<size; j++)
{
res.num[i+j] += num[j] * b.num[i];
}
res.CarryBit();
return res;
}
BigNum operator * (const int &b)const
{
int x = b;
BigNum res;
res.size = size;
if(x < 0)
{
res.op = res.op * -1;
x = -x;
}
for(int i=0; i<size; i++)
{
res.num[i] = num[i] * x;
}
res.CarryBit();
return res;
}
friend BigNum operator + (BigNum a, BigNum b)
{
BigNum res;
if(a.op != b.op)
{
res = a - b;
b.op = b.op * -1;
}
else
{
res.op = a.op;
res.size = max(a.size, b.size);
for(int i=0; i<res.size; i++)
res.num[i] = a.num[i] + b.num[i];
res.CarryBit();
}
return res;
}
friend BigNum operator + (BigNum a, int b)
{
BigNum res;
res = b;
res = res + a;
return res;
}
friend BigNum operator - (BigNum a, BigNum b)
{///b值小,先比较在进行相减
BigNum res;
b.op = b.op * -1;
if(a.op == b.op)
res = a + b;
else
{
if(a <= b)
swap(a, b);
res.size = a.size;
res.op = a.op;
for(int i=0; i<res.size; i++)
{
if(i < b.size)
res.num[i] = a.num[i] - b.num[i];
else
res.num[i] = a.num[i];
}
res.BorrowBit();
}
return res;
}
friend BigNum operator - (BigNum a, int b)
{
BigNum res;
res = b;
res = a - res;
return res;
}
void CarryBit()
{///进位,注意减法的时候进位结果需要是非负数
for(int i=0; i<size; i++)
{
if(num[i] >= 10)
{
if(i+1==size)
{
num[i+1] = 0;
size += 1;
}
num[i+1] += num[i]/10;
num[i] %= 10;
}
}
while(size > 1 && !num[size-1])
size--;
if(size == 1 && !num[0])
op = 1;
}
void BorrowBit()
{
for(int i=0; i<size; i++)
{
if(num[i] < 0)
{
num[i] += 10;
num[i+1] -= 1;
}
}
while(size > 1 && !num[size-1])
size--;
if(size == 1 && !num[0])
op = 1;
}
void Out()
{
if(op == -1)
printf("-");
for(int i=size-1; i>=0; i--)
printf("%d", num[i]);
printf("\n");
}
};
int main()
{
BigNum a, b;
a.Cin();
b.Cin();
a = a * b;
a.Out();
return 0;
}