import itertools
from functools import lru_cache
def f(n):
count = 0
def op1(perm):
return perm[1:]
def op2(perm):
return perm[:-1]
def op3(perm):
m = perm.index(max(perm))
return perm[:m] + perm[m+1:]
def op4(perm):
m = perm.index(min(perm))
return perm[:m] + perm[m+1:]
@lru_cache(None)
def valid(perm):
if len(perm) < 3:
return True
if len(perm) == 3:
if perm[0] < perm[1] < perm[2]:
return False
return True
return all(valid(op(perm)) for op in [op1, op2, op3, op4])
for perm in itertools.permutations(range(n)):
count += valid(perm)
return count
for i in range(9):
print(i, f(i))
aW1wb3J0IGl0ZXJ0b29scwpmcm9tIGZ1bmN0b29scyBpbXBvcnQgbHJ1X2NhY2hlCgpkZWYgZihuKToKICAgIGNvdW50ID0gMAogICAgCiAgICBkZWYgb3AxKHBlcm0pOgogICAgICAgIHJldHVybiBwZXJtWzE6XQoKCiAgICBkZWYgb3AyKHBlcm0pOgogICAgICAgIHJldHVybiBwZXJtWzotMV0KCgogICAgZGVmIG9wMyhwZXJtKToKICAgICAgICBtID0gcGVybS5pbmRleChtYXgocGVybSkpCiAgICAgICAgcmV0dXJuIHBlcm1bOm1dICsgcGVybVttKzE6XQoKCiAgICBkZWYgb3A0KHBlcm0pOgogICAgICAgIG0gPSBwZXJtLmluZGV4KG1pbihwZXJtKSkKICAgICAgICByZXR1cm4gcGVybVs6bV0gKyBwZXJtW20rMTpdCgoKICAgIEBscnVfY2FjaGUoTm9uZSkKICAgIGRlZiB2YWxpZChwZXJtKToKICAgICAgICBpZiBsZW4ocGVybSkgPCAzOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgICBpZiBsZW4ocGVybSkgPT0gMzoKICAgICAgICAgICAgaWYgcGVybVswXSA8IHBlcm1bMV0gPCBwZXJtWzJdOgogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgICByZXR1cm4gYWxsKHZhbGlkKG9wKHBlcm0pKSBmb3Igb3AgaW4gW29wMSwgb3AyLCBvcDMsIG9wNF0pCgogICAgZm9yIHBlcm0gaW4gaXRlcnRvb2xzLnBlcm11dGF0aW9ucyhyYW5nZShuKSk6CiAgICAgICAgY291bnQgKz0gdmFsaWQocGVybSkKCgogICAgcmV0dXJuIGNvdW50CgoKZm9yIGkgaW4gcmFuZ2UoOSk6CiAgICBwcmludChpLCBmKGkpKQo=