#include<cstdio>
#include<string>
#include<iostream>
#include<cstring>
using namespace std;
const int maxl=1000;
const int ten[4]={1,10,100,1000};
int sizee(int a){
int res=0;
while(a){
++res;
a/=10;
}
return res;
}
struct BigNumber{
int data[maxl];
BigNumber(int a){
int tmp,l=sizee(a);
memset(data,0,sizeof data);
data[0]=(l-1)/4+1;
for(int i=l-1;i>=0;--i){
tmp=l-i-1;
data[tmp/4+1]+=ten[tmp%4]*(a%10);
a/=10;
}
while(data[0]>1&&data[data[0]]==0) --data[0];
}
BigNumber(string s){
int tmp,l=s.size();
memset(data,0,sizeof data);
data[0]=(l-1)/4+1;
for(int i=l-1;i>=0;--i){
tmp=l-i-1;
data[tmp/4+1]+=ten[tmp%4]*(s[i]-'0');
}
while(data[0]>1&&data[data[0]]==0) --data[0];
}
BigNumber(){
*this=BigNumber(string("0"));
}
string toString(){
string s("");
int i,j,tmp;
for(i=3;i>=1;--i)
if(data[data[0]]>ten[i]) break;
tmp=data[data[0]];
for(j=i;j>=0;--j){
s=s+(char)(tmp/ten[j]+'0');
tmp%=ten[j];
}
for(i=data[0]-1;i>0;--i){
tmp=data[i];
for(j=3;j>=0;--j){
s=s+(char)(tmp/ten[j]+'0');
tmp%=ten[j];
}
}
return s;
}
};
BigNumber operator*(const BigNumber &a,const BigNumber &b){
BigNumber res;
int i,j,tmp;
res.data[0]=a.data[0]+b.data[0];
for(i=1;i<=a.data[0];++i){
tmp=0;
for(j=1;j<=b.data[0];++j){
tmp+=a.data[i]*b.data[j]+res.data[i+j-1];
res.data[i+j-1]=tmp%10000;
tmp/=10000;
}
res.data[i+b.data[0]]=tmp;
}
while(res.data[0]>1&&res.data[res.data[0]]==0) --res.data[0];
return res;
}
BigNumber jie(int a){
BigNumber res("1");
BigNumber tmp;
for(int i=1;i<=a;++i){
tmp=BigNumber(i);
res=res*tmp;
}
return res;
}
int main(){
int a;
while(cin>>a&&a!=-1){
BigNumber ans;
ans=jie(a);
cout<<ans.toString()<<endl;
}
return 0;
}