// 动态规划中较复杂的递推求解问题。。。
// 递推求解问题,根据输入的顺序,其答案往往排列成一个数列。首先得到输入规模较小的答案。
// 分析问题,将每一个问题分割成规模较小的几个问题,要做到不遗漏不重复,并确定它们的关系从而得到递推公式。。。
#include<stdio.h>
long long F[21];int main()
{
F[1]=0;
F[2]=1;
int n;
for(int i=3;i<21;i++) F[i]=(i-1)*(F[i-1]+F[i-2]);
while(scanf("%d",&n)!=EOF){
printf("%lld\n",F[n]);
}
return 0;
}