#[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())