#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
#define pi acos(-1.0)
struct complex{
double r,i;
complex(double real=0.0,double image=0.0)
{
r=real;
i=image;
}
inline complex operator + (const complex a)
{return complex(r+a.r,i+a.i);}
inline complex operator - (const complex a)
{return complex(r-a.r,i-a.i);}
inline complex operator * (const complex a)
{return complex(r*a.r-i*a.i,r*a.i+i*a.r);}
};
void brc(complex *y, int L) {
int i, j, k;
for (i=1,j=L>>1; i<L-1; ++i) { // 二进制平摊反转置换 O(NlogN)
if (i < j) swap(y[i], y[j]);
k = L>>1;
while (j >= k) {
j -= k;
k >>= 1;
}
j += k;
}
}
void FFT(complex *y, int L,double isI)
{
//isI为1是DFT,-1则IDFT
register int h,i,j,k;
complex u,t;
brc(y,L);
for(h=2;h<=L;h<<=1)//层数自底向上
{
//初始化单位复根
complex Wn( cos(isI*2*pi/h) , sin(isI*2*pi/h) );
for(j=0;j<L;j+=h) // 原序列被分成了L/h段h长序列
{
complex w(1,0);
for(k=j;k<j+h/2;k++) //蝴蝶操作
{
u=y[k];
t=w*y[k+h/2]; //按层配对
y[k]=u+t;
y[k+h/2]=u-t;
w=w*Wn; //更新旋转因子
}
}
}
if(isI==-1)
for(i=0;i<L;i++)
y[i].r/=L;
}
const int N = 50024;
int ans[N<<2];
complex a[N<<2], b[N<<2];
char num1[N], num2[N];
int main()
{
int i,j;
while(~scanf("%s%s",num1,num2))
{
memset(ans,0,sizeof(ans));
int len1=strlen(num1),len2=strlen(num2),L=1;
int ll=len1+len2-1;
while(L<ll) L<<=1;
for(i=len1-1,j=0;i>=0;--i,++j)
{
a[j]=complex(num1[i]-'0',0); //高位实为多项式的低位
}
for(i=len2-1,j=0;i>=0;--i,++j)
{
b[j]=complex(num2[i]-'0',0);
}
for(i=len1;i<L;++i) a[i]=complex(0,0);//补0
for(i=len2;i<L;++i) b[i]=complex(0,0);
FFT(a,L,1);
FFT(b,L,1);
for(i=0;i<L;++i)
{
a[i]=a[i]*b[i];
}
FFT(a,L,-1);
for(i=0;i<L;++i) ans[i]=a[i].r+0.5;
for(i=0;i<L;++i)
{
ans[i+1]+=ans[i]/10; //进1
ans[i]%=10;
}
int p=L;
while(!ans[p] && p) --p;
while(p>=0) printf("%d", ans[p--]);
puts("");
}
return 0;
}