def contains2143(n,i,p): # p permutation, i index of n in p if i == 0: return 0 min= p[i-1] left = n for x in range(min+1,n): if p.index(x) < i-1: left = x break if left== n: return 0 right = n for x in range(left+1,n): if p.index(x) > i: right = x break if right == n: return 0 return 1 def contains2413(n,i,p): # p permutation, i index of n in p if len(p) == i+1: return 0 min = p[i+1] left = n for x in range(min+1,n): if p.index(x) < i: left = x break if left == n: return 0 right = n for x in range(left+1,n): if p.index(x) > i+1: right = x break if right == n: return 0 return 1 def contains3142(n,i,p): # p permutation, i index of n in p if i == 0: return 0 min = p[i-1] right = n for x in range(min+1,n): if p.index(x) > i: right = x break if right == n: return 0 left = n for x in range(right+1,n): if p.index(x) < i-1: left = x break if left == n: return 0 return 1 def contains3412(n,i,p): # p permutation, i index of n in p if len(p) == i+1: return 0 min = p[i+1] right = n for x in range(min+1,n): if p.index(x) > i+1: right = x break if right == n: return 0 left = n for x in range(right+1,n): if p.index(x) < i: left = x break if left == n: return 0 return 1 def is_onesided(n, P): count = 0 P_n = [] for p in P: for i in range(n): s = list(p) s.insert(i,n) if (contains2143(n,i,s)==0) & (contains3142(n,i,s)==0) & (contains2413(n,i,s) == 0) & (contains3412(n,i,s) ==0): count += 1 P_n.append(s) print(n, count) return P_n def main(): p=[1] P=[p] for n in range(1,30): P = is_onesided(n,P) if __name__== "__main__": main()