def primechainsum(chains, primes):
    for chain in chains:
        if len(chain) == primes: return sum(chain)
    return 0    


# check against every prime in every array and add if applicable
n = 2 # the latest prime to be checked
ptc = 5
chains = []
primecandidates = []
tt1 = 0


while primechainsum(chains, ptc) == 0:
    if n == primes[-1]: primetools.sieve(len(primes) + 1, primes, True)
    n = primes[primes.index(n) + 1]
    primecandidates = []
    
    for prime in primes:
        if areprime(merge(n, prime)): primecandidates.append(prime)
    
    for chain in chains:
        allmatch = True
        for prime in chain:
            if prime not in primecandidates:
                allmatch = False
                break
        if allmatch: chains.append(chain + [n])
    chains.append([n])
    
from primetools import sieve
from time import time

phi2 = lambda p1, p2: p1 * p2 - (p1 + p2 - 1)

primes = [2,3]
limit = 10**7
st = time()
sieve(limit ** (1/2) * 1.5, primes)
first = 0
minrat = 0
minratn = 0
for p1 in range(len(primes)):
    if primes[p1] ** 2 < limit: continue
    if first == 0: first = p1
    for p2 in range(first, -1, -1):
        t = primes[p1] * primes[p2] 
        if t > limit: continue
        p = phi2(primes[p1], primes[p2])
        if t / p > minrat and minrat > 0: break
        if sorted(str(p)) == sorted(str(t)):
            minrat = t/p 
            minratn = t 
            break
print(minratn)
print(time() - st)