#!/usr/bin/python3 -u

# --------------------------------------------------------------

# Please adjust following values

maxlen   = 10
minbase  = 2
maxbase  = 128 # 36
minpower = 2
maxpower = 100 # 10

# --------------------------------------------------------------

# Don't edit after this line

print("PSEUDO IMMORTAL TUPLE SEARCH FOR BASE-B POWER-P")
print("Base:       {:>2} to {:>2}".format(minbase,maxbase))
print("Power:      {:>2} to {:>2}".format(minpower,maxpower))
print("")

def isImmortal(n,b,p):
	len = 1
	z = b
	while z < n:
		z = z * b
		len = len + 1
	return n**p % (b**len) == n

def rec_(n,b,p,l=1,m=10):
	out = []
	if isImmortal(n,b,p):
		if m > 0:
			out.append(n)
			if n > 2:
				return out
		if l<maxlen:
			for bx in range(0,b):
				nx = bx*b**l+n # add the digit "bx" in front of the number "n" and assign it to "nx"
				out_ = rec_(nx, b, p, l+1, bx)
				out = out + out_
	return out

def findImmort(b,p):
	out = []
	for bx in range(0,b):
		out = out + rec_(bx, b, p)
	out.sort()
	if out == [0, 1]:
		print("Pseudo-Immortal: ({},{})".format(b,p));
	else:
		print("Not pseudo-Immortal: ({},{})".format(b,p));

for b in range(minbase,maxbase+1):
	for p in range(minpower,maxpower+1):
		findImmort(b,p)

# --------------------------------------------------------------
