#アッカーマン関数を2通りで定義
def acm_r(m,n):
if m == 0:
return n + 1
if n == 0:
return acm_r(m - 1, 1)
return acm_r(m - 1, acm_r(m, n - 1))
def acm_non_r(m,n):
stk = [(m, n)]
while(len(stk)):
m,n = stk.pop()
if m is None and n is not None:
if len(stk):
m,_ = stk.pop()
stk.append((m, n))
else:
break
else:
if m == 0:
stk.append((None, n+1))
elif n == 0:
stk.append((m-1, 1))
else:
stk.append((m-1, None))
stk.append((m, n-1))
return n
#acm(i,j) 0<=i<4, 0<=j<5 で検査
print(all(acm_r(i,j) == acm_non_r(i,j) for i in range(4) for j in range(5)))
I+OCouODg+OCq+ODvOODnuODs+mWouaVsOOCkjLpgJrjgorjgaflrprnvqkKZGVmIGFjbV9yKG0sbik6CiBpZiBtID09IDA6CiAgcmV0dXJuIG4gKyAxCiBpZiBuID09IDA6CiAgcmV0dXJuIGFjbV9yKG0gLSAxLCAxKQogcmV0dXJuIGFjbV9yKG0gLSAxLCBhY21fcihtLCBuIC0gMSkpCgpkZWYgYWNtX25vbl9yKG0sbik6CiBzdGsgPSBbKG0sIG4pXQogd2hpbGUobGVuKHN0aykpOgogIG0sbiA9IHN0ay5wb3AoKQogIGlmIG0gaXMgTm9uZSBhbmQgbiBpcyBub3QgTm9uZToKICAgaWYgbGVuKHN0ayk6CiAgICBtLF8gPSBzdGsucG9wKCkKICAgIHN0ay5hcHBlbmQoKG0sIG4pKQogICBlbHNlOgogICAgYnJlYWsKICBlbHNlOgogICBpZiBtID09IDA6CiAgICBzdGsuYXBwZW5kKChOb25lLCBuKzEpKQogICBlbGlmIG4gPT0gMDoKICAgIHN0ay5hcHBlbmQoKG0tMSwgMSkpCiAgIGVsc2U6CiAgICBzdGsuYXBwZW5kKChtLTEsIE5vbmUpKQogICAgc3RrLmFwcGVuZCgobSwgbi0xKSkKIHJldHVybiBuCgojYWNtKGksaikgMDw9aTw0LCAwPD1qPDUg44Gn5qSc5p+7CnByaW50KGFsbChhY21fcihpLGopID09IGFjbV9ub25fcihpLGopIGZvciBpIGluIHJhbmdlKDQpIGZvciBqIGluIHJhbmdlKDUpKSk=