#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);
}