#include <bits/stdc++.h>
using i64 = long long;
const int N = 3e5 + 10;
const double PI = acos(-1);
int n, m;
struct Complex {
double x, y;
Complex operator+ (const Complex& t) const {
return {x + t.x, y + t.y};
}
Complex operator- (const Complex& t) const {
return {x - t.x, y - t.y};
}
Complex operator* (const Complex& t) const {
return {x * t.x - y * t.y, x * t.y + y * t.x};
}
}a[N], b[N];
int rev[N], ans[N], bit, tot;
void FFT (Complex a[], int inv) {
for (int i = 0; i < tot; i ++) {
if (i < rev[i]) {
std::swap (a[i], a[rev[i]]);
}
}
for (int mid = 1; mid < tot; mid <<= 1) {
auto w1 = Complex({cos(PI / mid), inv * sin(PI / mid)});
for (int i = 0; i < tot; i += mid * 2) {
auto wk = Complex({1, 0});
for (int j = 0; j < mid; j ++, wk = wk * w1) {
auto x = a[i + j], y = wk * a[i + j + mid];
a[i + j] = x + y, a[i + j + mid] = x - y;
}
}
}
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::string A, B;
std::cin >> A >> B;
int n = A.size() - 1, m = B.size() - 1;
for (int i = 0; i <= n; i ++) {
a[i].x = A[n - i] - '0';
}
for (int i = 0; i <= m; i ++) {
b[i].x = B[m - i] - '0';
}
while ((1 << bit) < n + m + 1) {
bit ++;
}
tot = 1 << bit;
for (int i = 0; i < tot; i ++) {
rev[i] = (rev[i >> 1] >> 1) | (i & 1) << (bit - 1);
}
FFT(a, 1), FFT(b, 1);
for (int i = 0; i < tot; i ++) {
a[i] = a[i] * b[i];
}
FFT(a, -1);
int k = 0;
for (int i = 0, t = 0; i < tot || t; i ++) {
t += a[i].x / tot + 0.5;
ans[k ++] = t % 10;
t /= 10;
}
while (k > 1 && !ans[k - 1]) k --;
for (int i = k - 1; i >= 0; i --) {
std::cout << ans[i];
}
return 0;
}