#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX = 100000;
int a[MAX]; //大数乘法一个数组储存一位
int main()
{
int n;
while(~scanf("%d",&n)) {
if(n == 0) {
printf("1\n");
continue;
}
memset(a,0,sizeof(a));
a[0] = 1;
int numb = 1; //numb是目前a 数组的个数 也就是目前位数
int k = 0; //k保存进位情况
for(int i = 1; i <= n; i++) {
for(int j = 0; j < numb; j++) {
a[j] = a[j]*i + k;
k = a[j] /10;
a[j] %= 10;
}
while(k) { //k != 0 说明还存在进位 依次把进位放进数组里
a[numb++] = k %10;
k /= 10;
}
}
for(int i = numb-1; i > -1; i--) {
printf("%d",a[i]); //从尾端开始打印
}
cout << endl;
}
}