n = int(input())
s = 1
ans = 0
for i in range(1,n+1,1):
s *= i
ans += s
print(ans)
def NonRepeatList1(data): #函数1:set去重,不保持原顺序
return list(set(data))
def NonRepeatList2(data): #函数2:暴力去重,保持原顺序
return [i for n, i in enumerate(data) if i not in data[:n]]
#下面测试上面2个函数
import random
import time
time0 = time.time()
a = []
for i in range(0,100000,1): #10万个随机数
a.append(random.randint(-100000000,100000000)) #随机数取值范围
#print (a) #可以打印数组看看
print ("random time =",time.time()-time0) #统计随机数的生成时间
time0 = time.time()
b = NonRepeatList1(a) #去重,不保持原顺序
#print (b) #打印看看顺序
random.shuffle(b) #再次打乱顺序
#print (b) #打印看看是否乱序
print ("set time =",time.time()-time0) #统计set()去重的时间
time0 = time.time()
c = NonRepeatList2(a) #去重,保持原顺序
#print (c) #打印看看是否保持原序
print ("enum time =",time.time()-time0) #统计暴力去重的时间
d = []
for i in range(0,len(b),1): #b是去重后的整数数组
d.append(b[i] / 100)
#把本代码存为文件 makedata.py
import random
a= []
b= []
for i in range(0,1000000,1): #100万个随机数
a.append(random.randint(-500000,500000))
b=list(set(a)) #去重后放在b中
#print("lena=",len(a)) #验证a的个数是不是100万个
#print("lenb=",len(b)) #b的个数有60多万个
random.shuffle(b) #打乱b
print(len(b),random.randint(1,len(b))) #打印n、m
for i in range(0,len(b),1): #逐个打印
print ( b[i],end=' ')
#下面的做法用到了文件操作,其实不需要在代码中存取文件,后文“2 对拍”的做法更简单
'''
f = open("d:\data.in", "w") #输出到文件里
print(len(b),random.randint(1,len(b)),file=f)
for i in range(0,len(b),1): #逐个打印
print ( b[i],end=' ',file=f)
f.close()
'''
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1000001;
int a[MAXN];
int main(){
int n,m;
while(~scanf("%d%d", &n, &m)){
memset(a, 0, sizeof(a));
for(int i=0; i<n; i++){
int t;
scanf("%d", &t); //此题数据多,如果用很慢的cin输入,肯定TLE
a[500000+t]=1; //数字t,登记在500000+t这个位置
}
for(int i=MAXN; m>0; i--)
if(a[i]){
if(m>1) printf("%d ", i-500000);
else printf("%d\n", i-500000);
m--;
}
}
return 0;
}