#include <stdio.h>
int main(){
int arr[10000], i,N,m,z,up,temp;//m:模除结果;z整除结果;up:进位结果
while(scanf("%d",&N)!=EOF){
if(N==0){//N=0时,直接输出
printf("0\n");
break;
}
arr[0]=1;
for(i=1;i<10000;i++)//初始化,arr[0]是个位
arr[i]=0;
for(i=2;i<=N;i++){//N=1时,什么也不做,最后输出出来即可
up=0;
for(int k=0;k<10000;k++){//每乘一个i,都i要遍历整个数组
temp=(arr[k]*i+up)%10;//temp先存一下新的arr[k]
up=(arr[k]*i+up)/10;
arr[k]=temp;
}
}
for(int j=9999;j>=0;j--)
if(arr[j]){//反向遍历,找到第一个非零数
for(;j>=0;j--){
printf("%d",arr[j]);
}
printf("\n");
break;//输出完,退出整个循环
}
}
return 0;
}