模板
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=300005;
const double PI=acos(-1);
int n,tot;
char s[N];
struct C
{
double real,i;
C (double a=0,double b=0) {real=a,i=b;}
C operator+(C x) {return C(real+x.real,i+x.i);}
C operator-(C x) {return C(real-x.real,i-x.i);}
C operator*(C x) {return C(real*x.real-i*x.i,real*x.i+x.real*i);}
}a[N],b[N];
int rev[N],ans[N];
inline void FFT(C x[],int T)
{
for (int i=0;i<n;i++)
if (rev[i]<i) swap(x[i],x[rev[i]]);
for (int i=2;i<=n;i<<=1)
{
C wn(cos(2*PI/i),T*sin(2*PI/i));
for (int j=0;j<n;j+=i)
{
C t,tmp,w(1,0);
for (int k=0;k<(i>>1);k++)
{
tmp=x[j+k];
t=w*x[j+k+(i>>1)];
x[j+k]=tmp+t;
x[j+k+(i>>1)]=tmp-t;
w=w*wn;
}
}
}
}
int main()
{
scanf("%d",&n);
scanf("%s",s);
for (int i=0;i<n;i++)
a[i].real=s[n-i-1]-'0';
scanf("%s",s);
for (int i=0;i<n;i++)
b[i].real=s[n-i-1]-'0';
int tmp=n<<1; n=1;
while (n<tmp) n<<=1;
for (int i=0;i<n;i++)
rev[i]=(rev[i>>1]>>1)|((i&1)?n>>1:0);
FFT(a,1); FFT(b,1);
for (int i=0;i<n;i++)
a[i]=a[i]*b[i];
FFT(a,-1);
int i=n-1;
while ((int)(a[i].real/(double)n+0.5)==0) i--;
for (int j=0;j<=i;j++)
ans[++tot]=(int)(a[j].real/(double)n+0.5);
for (int j=1;j<=tot;j++)
if (ans[j]>9)
{
ans[j+1]+=ans[j]/10;
ans[j]%=10;
tot=max(tot,j+1);
}
for (int j=tot;j;j--)
printf("%d",ans[j]);
return 0;
}