#[i for i in a if not 2==i] def ys(mem,ln,ai): print(mem) co = 0 if len(ln)==0:return True if A[ai]==0: for idx,c in enumerate(ln): tf = True if c>mem[-1]: zz = [i for i in ln if not c==i] tf = tf and ys(mem+[c],zz,ai+1) else:tf = False#;return False if tf:co+=1 elif A[ai]==1: for idx,c in enumerate(ln): tf = True if c<mem[-1]: zz = [i for i in ln if not c==i] tf = tf and ys(mem+[c],zz,ai+1) else:tf = False#;return False if tf:co+=1 return co #N = int(input().strip()) #A = [int(i) for i in input().strip().split()] N = 4#int(input().strip()) A = [1,1,0]#[int(i) for i in input().strip().split()] def so(): if N<=0 :return 0 if N ==1:return 1 ln = [i for i in range(1,N+1)] tmp = [] count = 0 for idx,c in enumerate(ln): tmp = [c] zz= [i for i in ln if not c==i] #import pdb;pdb.set_trace() count += ys(tmp,zz,0) return count print(so())