#include<bits/stdc++.h>
using namespace std;
int a[2000],b[2000],c[4000];
string time(string x,string y){//高精乘
int lenx = x.size(),leny = y.size();
for(int i=0;i<lenx;i++) a[i+1] = x[lenx-i-1] - '0';//字符to数字
for(int i=0;i<leny;i++) b[i+1] = y[leny-i-1] - '0';//并且倒序
for(int i=1;i<=lenx;i++){//开始运算
for(int j=1;j<=leny;j++){
c[i+j-1] += a[i]*b[j];
c[i+j] += c[i+j-1]/10;
c[i+j-1] %= 10;
}
}
int maxl = lenx+leny;
while(!c[maxl] && maxl!=1) maxl--;//去除前导0
string sss="";
for(int i=maxl;i>=1;i--) sss+=char(c[i]+'0');//逐位拼接
return sss;
}
string sum(string m,string n){//高精加(结构基本同上)
int lenm = m.size(),lenn = n.size();
for(int i=0;i<lenm;i++) a[i+1] = m[lenm-i-1] - '0';
for(int i=0;i<lenn;i++) b[i+1] = n[lenn-i-1] - '0';
int maxl = max(lenm,lenn);
for(int i=1;i<=maxl;i++){
c[i] += a[i]+b[i];
c[i+1] += c[i]/10;
c[i] %= 10;
}
if(c[maxl+1]) maxl++;
while(!c[maxl] && maxl!=1) maxl--;
string sss="";
for(int i=maxl;i>=1;i--) sss+=char(c[i]+'0');
return sss;
}
int main(){
int n;cin>>n;
string s;
string ans = "1",suma = "0";//初始化
for(int i=1;i<=n;i++){//阶乘
s = char(i+'0');
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
ans = time(ans,s);//阶乘累加
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
suma = sum(suma,ans);//加入答案
}
cout<<suma;
return 0;
}