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