#include <iostream>
#include <cstring>
using namespace std;
struct bign {
int d[1000];
int len, flag; //flag 标识正数和负数 1 为负数 0 正数
bign() {
fill(d, d + 1000, 0);
len = 0;
flag = 0; //默认为正数
}
};
bign change(char str[]) {
bign a;
if (str[0] == '-') a.flag = 1;
a.len = strlen(str);
for (int i = 0; i < a.len; i++) {
if (str[a.len - i - 1] >= '0' && str[a.len - i - 1] <= '9') {
a.d[i] = str[a.len - i - 1] - '0';
}
}
if (str[0] == '+' || str[0] == '-') a.len--;
return a;
}
//去除前导0,但保证有一位为0
void dislodge(bign &a) {
while (a.len - 1 > 0 && a.d[a.len - 1] == 0) a.len--;
}
bign multi(bign a, bign b) {
int carray = 0;
bign c;
for (int i = 0; i < a.len; i++) {
for (int j = 0; j < b.len; j++) {
c.d[i + j] += a.d[i] * b.d[j];
}
}
c.len = a.len + b.len + 1;
//处理进位
for (int i = 1; i < c.len; i++) {
c.d[i] += (c.d[i-1] / 10);
c.d[i-1] = (c.d[i-1] % 10);
}
dislodge(c);
return c;
}
int main() {
char stra[1001], strb[1001];
scanf("%s %s", stra, strb);
bign a = change(stra);
bign b = change(strb);
bign c = multi(a, b);
if (a.flag != b.flag) c.flag = 1;
if (c.flag == 1) printf("-");
for (int i = c.len-1; i >= 0; i--) {
printf("%d", c.d[i]);
}
return 0;
}