

from __future__ import annotations

import math
from itertools import permutations





def  _snake_case		(snake_case_					:     int  )							->		bool:

  if 1 < number < 4:
    # 2 and 3 are primes
    return True
  elif number < 2 or number % 2 == 0 or number % 3 == 0:
    # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes
    return False

  # All primes number are in format of 6k +/- 1
  for i in range(5    ,       int(math.sqrt(snake_case_  ) + 1  )    ,       6  ):
    if number % i == 0 or number % (i + 2) == 0:
      return False
  return True





def  _snake_case		(snake_case_					:     int = 7  )							->		int:
  __UpperCAmelCase	:  Dict		=     ''.join(str(snake_case_  ) for i in range(1    ,       n + 1  )  )
  __UpperCAmelCase	:  Any		=     [int(''.join(snake_case_  )  ) for i in permutations(snake_case_    ,       snake_case_  )]
  __UpperCAmelCase	:  Dict		=     [num for num in perm_list if is_prime(snake_case_  )]
  return max(snake_case_  ) if pandigitals else 0


if __name__ == "__main__":
      print(F'''{solution() = }''')












"""simple docstring"""






from __future__ import annotations

def    __lowerCamelCase     (							SCREAMING_SNAKE_CASE,SCREAMING_SNAKE_CASE				)		->							list:






       """simple docstring"""




       _UpperCAmelCase			     =  [None] * (len(SCREAMING_SNAKE_CASE				) + len(SCREAMING_SNAKE_CASE				))

       _UpperCAmelCase			     =  0  # pointer to current index for left Half
       _UpperCAmelCase			     =  0  # pointer to current index for the right Half
       _UpperCAmelCase			     =  0  # pointer to current index for the sorted array Half

       while pointera < len(SCREAMING_SNAKE_CASE				) and pointera < len(SCREAMING_SNAKE_CASE				):
              if left_half[pointera] < right_half[pointera]:
                     _UpperCAmelCase			     =  left_half[pointera]
                     pointera += 1
                     index += 1
              else:
                     _UpperCAmelCase			     =  right_half[pointera]
                     pointera += 1
                     index += 1
       while pointera < len(SCREAMING_SNAKE_CASE				):
              _UpperCAmelCase			     =  left_half[pointera]
              pointera += 1
              index += 1

       while pointera < len(SCREAMING_SNAKE_CASE				):
              _UpperCAmelCase			     =  right_half[pointera]
              pointera += 1
              index += 1

       return sorted_array

def    __lowerCamelCase     (							SCREAMING_SNAKE_CASE				)		->							list:






       """simple docstring"""




       if len(SCREAMING_SNAKE_CASE				) <= 1:
              return array
       # the actual formula to calculate the middle element = left + (right - left) // 2
       # this avoids integer overflow in case of large N
       _UpperCAmelCase			     =  0 + (len(SCREAMING_SNAKE_CASE				) - 0) // 2

       # Split the array into halves till the array length becomes equal to One
       # merge the arrays of single length returned by mergeSort function and
       # pass them into the merge arrays function which merges the array
       _UpperCAmelCase			     =  array[:middle]
       _UpperCAmelCase			     =  array[middle:]

       return merge(merge_sort(SCREAMING_SNAKE_CASE				),merge_sort(SCREAMING_SNAKE_CASE				)				)


if __name__ == "__main__":
    import doctest

    doctest.testmod()






