//递归关系很简单
//主要考虑了大数乘法,将数据存储为字符串并模拟了乘法的进位
//实现了较大数的乘法
//但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;
}