#include <iostream>
#include <cstring>
using namespace std;
struct bign {
int d[100000];
int len;
bign() {
len = 0;
memset(d, 0, sizeof(d));
}
};
bign add(bign a, bign b) {
bign c;
int carry = 0;//进位
for (int i = 0; i < a.len || i < b.len; i++) {
int temp = a.d[i] + b.d[i] + carry;
c.d[c.len++] = temp % 10;
carry = temp / 10;
}
if (carry != 0) {
c.d[c.len++] = carry;
}
return c;
}
bign multi(bign a, int b) {
bign c;
int carry = 0;
for (int i = 0; i < a.len; i++) {
int temp = a.d[i] * b + carry;
c.d[c.len++] = temp % 10;
carry = temp / 10;
}
while (carry != 0) {
c.d[c.len++] = carry % 10;
carry = carry / 10;
}
return c;
}
bign change(char s[]) {
bign c;
string str = s;
c.len = str.size();
for (int i = 0; i < c.len; i++) { //倒着赋值
c.d[i] = str[c.len - i - 1] - '0';
}
return c;
}
void print(bign a) {
for (int i = a.len - 1; i >= 0; i--) {
printf("%d", a.d[i]);
}
printf("\n");
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
bign c;
c.len = 1;
c.d[0] = 1;
for (int i = 1; i <= n; i++) {
c = multi(c, i);
}
print(c);
}
return 0;
}