//递归关系很简单
//主要考虑了大数乘法,将数据存储为字符串并模拟了乘法的进位
//实现了较大数的乘法
//但n>1000时算法执行时间仍会有明显增加
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <iterator>
using namespace std;

string multi(string str1,string str2)
{
    vector<int>output(str1.length()+str2.length());
    int a,b,c;            //a-十进位 b-百进位 c-千进位
    reverse(str1.begin(),str1.end());
    reverse(str2.begin(),str2.end());
    for(int i=0;i<str1.length();i++)
    {
        for(int j=0;j<str2.length();j++)
        {
            output[i+j] += (str1[i]-'0')*(str2[j]-'0');
        }
    }
    for(int i=0;i<str1.length()+str2.length();i++)
    {
        c=output[i]/1000;
        b=(output[i]/100)%10;
        a=(output[i]/10)%10;
        output[i]%=10;
        if(a != 0)
        {
            output[i+1] += a;
        }
        if(b != 0)
        {
            output[i+2] += b;
        }
        if(c != 0)
        {
            output[i+3] += c;
        }
    }
    stringstream ss;
    string s,outcome;
    copy(output.rbegin(),output.rend(),ostream_iterator<int>(ss,"")); //vector<int>-->string
    s=ss.str();
    int m=0;
    while(s[m]=='0')
    {
        m++;
    }
    outcome=s.substr(m,s.length()); //除去前面多余的0
    return outcome;
}

int main() {
   int n;
   cin>>n;
   vector<string>outcome(n+1);
   outcome[0]="1";
   outcome[1]="1";
   for(int i =2 ;i <= n;i++)
   {
        outcome[i]=multi(to_string(i),outcome[i-1]);
   }
   cout<<outcome[n];
   return 0;
}