#include <iostream>
#include <cstdio>
#include <iterator>
#include <string>
#include <cstring>
using namespace std;

const int maxn = 10000;

struct biginteger {
    int digit[maxn];
    int length;
    biginteger(); //构造
    biginteger(int x); //带参构造
    biginteger operator=(string str);   //赋值
    biginteger operator+(const biginteger& b);  //相加
    biginteger operator*(const biginteger& b);
    friend istream& operator>>(istream& in, biginteger& x); //输入
    friend ostream& operator<<(ostream& out,const biginteger& x); //输出
};

istream& operator>>(istream& in, biginteger& x) {
    string str;
    in >> str;
    x = str;
    return in;
}

ostream& operator<<(ostream& out, const biginteger& x) {
    for (int i = x.length - 1; i >= 0; i--) {//倒过来存储 要倒过来输出才是正常的十进制
        out << x.digit[i];
    }
    return out;
}

biginteger::biginteger() {
    memset(digit, 0, sizeof(digit)); //构造
    length = 0;
}

biginteger::biginteger(int x) {     //int是倒过来存的  120在数组中是0 2 1
    memset(digit, 0, sizeof(digit));
    length = 0;
    if (x == 0) {
        digit[length++] = x;
    }
    while (x != 0) {
        digit[length++] = x % 10;
        x /= 10;

    }
}
biginteger biginteger::operator=(string str) {         //赋值
    memset(digit, 0, sizeof(digit));
    length = str.size();
    for (int i = 0; i < length; i++) {
        digit[i] = str[length - i - 1] - '0';
    }
    return *this;
}
// biginteger biginteger::operator+(const biginteger& b) { //相加
//     biginteger answer;
//     int carry = 0;
//     for (int i = 0; i < length || i < b.length; i++) {
//         int current = carry + digit[i] +
//                       b.digit[i]; //和正常计算一样,先算当前位,再算进位
//         carry = current / 10;
//         answer.digit[answer.length++] = current % 10; //将当前位存入答案
//     }
//     if (carry) {
//         answer.digit[answer.length++] = carry;
//     }
    
//     return answer;

// }
biginteger biginteger::operator*(const biginteger& b) {
    biginteger answer;
    answer.length = length + b.length;
    for (int i = 0; i < length; i++) { //各个位相乘 从0开始 因为是倒过来的 所以0依然是从低位开始
        for (int j = 0; j < b.length; j++) {
            answer.digit[i + j] += digit[i] * b.digit[j];
        }
    }
    for (int i = 0; i < answer.length; i++) {
        answer.digit[i + 1] +=answer.digit[i] / 10;
        answer.digit[i] %= 10;
    }
    while (answer.digit[answer.length-1] == 0 && answer.length > 1) {
        answer.length--;
    }
    return answer;
}
int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        biginteger answer(1);
        for (int i = 1; i <= n; i++) {
            answer = answer * biginteger(i);
        }
        std::cout << answer << std::endl; 
    }return 0;
}