#include <fstream>
#define B 1000000
#include <algorithm>
#include <cstdio>
#include <cstring>
#include<iomanip>
using namespace std;
ifstream f("petrecere.in");
ofstream g("petrecere.out");
int p1=0,p2=1,p3=2,n;
int d[4][3005];
void inmultire(int v[3005],int x)
{
int t=0;
for(int i=1;i<=v[0];i++)
{
t = v[i]*x + t;
v[i] = t%B;
t = t/B;
}
if(t)
{
v[0]++;
v[v[0]]=t;
}
}
void adunare(int a[3005],int b[3005])
{
int t=0;
for(int i=1;i<=max(a[0],b[0]);i++)
{
t= a[i] + b[i] +t;
a[i]=t%B;
t=t/B;
}
a[0] = max(a[0],b[0]);
if(t)
{
a[0]++;
a[a[0]]=t;
}
}
int main()
{
f>>n;
d[p1][1] = 1;
d[p1][0] = 1;
d[p2][1] = 2;
d[p2][0] = 1;
if(n==1)
{
g<<1<<'\n';
return 0;
}
if(n==2)
{
g<<2<<'\n';
return 0;
}
for(int i=3;i<=n;i++)
{
for(int j=1;j<=d[p3][0];j++)
d[p3][j]=0;
d[p3][0]=0;
inmultire(d[p1],i-1);
adunare(d[p3],d[p2]);
adunare(d[p3],d[p1]);
p1 = (p1+1)%3;
p2 = (p2+1)%3;
p3 = (p3+1)%3;
}
g<<d[p2][d[p2][0]];
for(int i=d[p2][0]-1;i>=1;i--)
g<<setw(6)<<setfill('0')<<d[p2][i];
return 0;
}