- def dict_create(min_factor, max_factor): 
-     dict_resulted = {} 
-     for i in range(min_factor, max_factor + 1): 
-         for j in range(min_factor, max_factor + 1): 
-             num, list_of_factors = i * j, sorted([i, j]) 
-             if num not in dict_resulted: 
-                 dict_resulted[num] = [list_of_factors] 
-             else: 
-                 if list_of_factors not in dict_resulted[num]: 
-                     dict_resulted[num].append(list_of_factors) 
-     return dict_resulted 
-   
-   
- def largest(min_factor, max_factor): 
-     if max_factor < min_factor: 
-         raise ValueError("min must be <= max") 
-     dict_operated = dict_create(min_factor, max_factor) 
-     for num in sorted(dict_operated, reverse = True): 
-         if str(num) == str(num)[::-1]: 
-             return tuple([num, dict_operated[num]]) 
-   
-   
- def smallest(min_factor, max_factor): 
-     if max_factor < min_factor: 
-         raise ValueError("min must be <= max") 
-     dict_operated = dict_create(min_factor, max_factor) 
-     for num in sorted(dict_operated): 
-         if str(num) == str(num)[::-1]: 
-             return tuple([num, dict_operated[num]]) 
-   
-   
- print(largest(10, 99)) 
- print() 
- print(smallest(10, 99)) 
-   
				ZGVmIGRpY3RfY3JlYXRlKG1pbl9mYWN0b3IsIG1heF9mYWN0b3IpOgogICAgZGljdF9yZXN1bHRlZCA9IHt9CiAgICBmb3IgaSBpbiByYW5nZShtaW5fZmFjdG9yLCBtYXhfZmFjdG9yICsgMSk6CiAgICAgICAgZm9yIGogaW4gcmFuZ2UobWluX2ZhY3RvciwgbWF4X2ZhY3RvciArIDEpOgogICAgICAgICAgICBudW0sIGxpc3Rfb2ZfZmFjdG9ycyA9IGkgKiBqLCBzb3J0ZWQoW2ksIGpdKQogICAgICAgICAgICBpZiBudW0gbm90IGluIGRpY3RfcmVzdWx0ZWQ6CiAgICAgICAgICAgICAgICBkaWN0X3Jlc3VsdGVkW251bV0gPSBbbGlzdF9vZl9mYWN0b3JzXQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgaWYgbGlzdF9vZl9mYWN0b3JzIG5vdCBpbiBkaWN0X3Jlc3VsdGVkW251bV06CiAgICAgICAgICAgICAgICAgICAgZGljdF9yZXN1bHRlZFtudW1dLmFwcGVuZChsaXN0X29mX2ZhY3RvcnMpCiAgICByZXR1cm4gZGljdF9yZXN1bHRlZAogICAgICAKCmRlZiBsYXJnZXN0KG1pbl9mYWN0b3IsIG1heF9mYWN0b3IpOgogICAgaWYgbWF4X2ZhY3RvciA8IG1pbl9mYWN0b3I6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibWluIG11c3QgYmUgPD0gbWF4IikKICAgIGRpY3Rfb3BlcmF0ZWQgPSBkaWN0X2NyZWF0ZShtaW5fZmFjdG9yLCBtYXhfZmFjdG9yKQogICAgZm9yIG51bSBpbiBzb3J0ZWQoZGljdF9vcGVyYXRlZCwgcmV2ZXJzZSA9IFRydWUpOgogICAgICAgIGlmIHN0cihudW0pID09IHN0cihudW0pWzo6LTFdOgogICAgICAgICAgICByZXR1cm4gdHVwbGUoW251bSwgZGljdF9vcGVyYXRlZFtudW1dXSkKCgpkZWYgc21hbGxlc3QobWluX2ZhY3RvciwgbWF4X2ZhY3Rvcik6CiAgICBpZiBtYXhfZmFjdG9yIDwgbWluX2ZhY3RvcjoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtaW4gbXVzdCBiZSA8PSBtYXgiKQogICAgZGljdF9vcGVyYXRlZCA9IGRpY3RfY3JlYXRlKG1pbl9mYWN0b3IsIG1heF9mYWN0b3IpCiAgICBmb3IgbnVtIGluIHNvcnRlZChkaWN0X29wZXJhdGVkKToKICAgICAgICBpZiBzdHIobnVtKSA9PSBzdHIobnVtKVs6Oi0xXToKICAgICAgICAgICAgcmV0dXJuIHR1cGxlKFtudW0sIGRpY3Rfb3BlcmF0ZWRbbnVtXV0pCgoKcHJpbnQobGFyZ2VzdCgxMCwgOTkpKQpwcmludCgpCnByaW50KHNtYWxsZXN0KDEwLCA5OSkpCg==