#include <stdio.h>
#include <memory.h>
#include <string.h>
#define N ((int)1e6+5)
#define M ((int)1e7) //每个元素存M位
#define M0 7
long long a[N];
int getW(int n);
int main()
{
int n;
while(scanf("%d",&n)==1){
// int a[N]={1};
memset(a,0,sizeof(a));
//从低位到高位存储大数
a[0]=1;
int k=1; //当前k位数
//计算阶乘
for(int i=2;i<=n;i++){
//当前大数a乘以i
int jin=0;
for(int j=0;j<k;j++){
//当前位乘积+进位
a[j]=a[j]*i+jin;
jin=a[j]/M; //进位
a[j]=a[j]%M; //当前位
}
//处理最高位进位
while(jin){
a[k++]=jin%M; //当前位
jin/=M; //进位
}
}
//输出从高位到低位
printf("%d",a[k-1]);
//解决前导0问题
for(int i=k-2;i>=0;i--){
int tl=getW(a[i]);
for(int j=tl;j<M0;j++)
printf("0");
printf("%d",a[i]);
}
printf("\n");
// printf("%d\n",k);
printf("weishu:%d\n",(k-1)*M0+getW(a[k-1]));
}
return 0;
}
int getW(int n)
{
char ts[M0+2];
sprintf(ts,"%d",n);
return strlen(ts);
}