import math,time

def tevemadar_version(maxInt):
    maxpal=0
    for x in range(maxInt,0,-1):
        if x*x<maxpal:                                                     # 4.
            break
        for y in range(x,max(maxpal//x,10**int(math.log10(x))-1),-1):      # 1. 3. 5.
            num=x*y
            if str(num) == str(num)[::-1]:
                maxpal=num
                break                                                      # 2.
    return maxpal
    
def mushif_version(maxInt):
    largest_palindrome = 9
    digit_count = len(str(maxInt))
    a = maxInt
    while a >= 10**(digit_count-1):
        if a % 11 == 0:
            b = maxInt
            divided_by = 1
        else:
            b = maxInt - maxInt % 11
            divided_by = 11

        while b >= a:
            if a * b <= largest_palindrome:
                break
            prod = a * b
            str_num = str(prod)
            if str_num == str_num[::-1]:
                largest_palindrome = prod

            b = b - divided_by
        a = a - 1
    return largest_palindrome


print("tevemadar_version:")
start=time.time()
print(tevemadar_version(9))
print(tevemadar_version(99))
print(tevemadar_version(999))
print(tevemadar_version(9999))
print(tevemadar_version(99999))
print(tevemadar_version(999999))
print("{0} seconds".format(time.time()-start))

start=time.time()
print("\nmushif_version:")
print(mushif_version(9))
print(mushif_version(99))
print(mushif_version(999))
print(mushif_version(9999))
print(mushif_version(99999))
print(mushif_version(999999))
print("{0} seconds".format(time.time()-start))