#include <iostream>
using namespace std;
int main()
{
int n,i,j;
while (cin>>n)
{
int flag=1; //当前阶乘答案的位数 (进位:需要进几位 例99*100 则需要进两位)
int carry=0; //用来储存每一次未存进去的数 例如24 存4进去 carry=24/10=2 留到下一次相加后存
int res=0; //用来读取每位数(从个位开始)乘以当前的阶乘数 并对它进行处理后存储
int str[40000]; //根据题目要求设置数组的大小
str[0]=1;
for (i=2;i<=n;i++) //从2开始计算阶乘
{
for (j=1;j<=flag;j++) //根据进位flag大小来判断当前阶乘结果的的位数
{
res=str[j-1]*i+carry;
str[j-1]=res%10;
carry=res/10;
}
while (carry) //当进位大于一时将结果扩展到下一位
{
flag++;
str[flag-1]=carry%10;
carry/=10;
}
}
for (i=flag-1;i>=0;i--) //将结果数组倒序输出,注意最后一位是"i=flag-1",因为"flag=1" 对应str[0],以此类推
{
cout<<str[i];
}
cout<<endl;
}
return 0;
} //res=0 str[0]=1 carry =0 flag=1
//res=2 str[0]=2 carry=0
//res=6 str[0]=6 carry=0
//i=4 res=24 str[0]=4 carry=2 flag=2 str[1]=2 carry=0
// i=5 res=20 str[0]=0 carry=2 res=12 str[1]=2 carry=1 flag=3 str[2]=1 carry=0
using namespace std;
int main()
{
int n,i,j;
while (cin>>n)
{
int flag=1; //当前阶乘答案的位数 (进位:需要进几位 例99*100 则需要进两位)
int carry=0; //用来储存每一次未存进去的数 例如24 存4进去 carry=24/10=2 留到下一次相加后存
int res=0; //用来读取每位数(从个位开始)乘以当前的阶乘数 并对它进行处理后存储
int str[40000]; //根据题目要求设置数组的大小
str[0]=1;
for (i=2;i<=n;i++) //从2开始计算阶乘
{
for (j=1;j<=flag;j++) //根据进位flag大小来判断当前阶乘结果的的位数
{
res=str[j-1]*i+carry;
str[j-1]=res%10;
carry=res/10;
}
while (carry) //当进位大于一时将结果扩展到下一位
{
flag++;
str[flag-1]=carry%10;
carry/=10;
}
}
for (i=flag-1;i>=0;i--) //将结果数组倒序输出,注意最后一位是"i=flag-1",因为"flag=1" 对应str[0],以此类推
{
cout<<str[i];
}
cout<<endl;
}
return 0;
} //res=0 str[0]=1 carry =0 flag=1
//res=2 str[0]=2 carry=0
//res=6 str[0]=6 carry=0
//i=4 res=24 str[0]=4 carry=2 flag=2 str[1]=2 carry=0
// i=5 res=20 str[0]=0 carry=2 res=12 str[1]=2 carry=1 flag=3 str[2]=1 carry=0