


from __future__ import annotations



class    __lowercase  :

							"""simple docstring"""


							def __init__(    self				, A_	)->	None:
											_SCREAMING_SNAKE_CASE      = value
											_SCREAMING_SNAKE_CASE      = None
											_SCREAMING_SNAKE_CASE      = None







class    __lowercase  :

							"""simple docstring"""


							SCREAMING_SNAKE_CASE   :					int





							def __init__(    self	)->	None:
											_SCREAMING_SNAKE_CASE      = 0





							def 		__magic_name__			(    self				, A_				, A_	)->	None:
											if node is None:
															return

											if path_sum == self.target:
															self.paths += 1

											if node.left:
															self.depth_first_search(node.left				, path_sum + node.left.value	)
											if node.right:
															self.depth_first_search(node.right				, path_sum + node.right.value	)





							def 		__magic_name__			(    self				, A_				, A_ = None	)->	int:
											if node is None:
															return 0
											if target is not None:
															_SCREAMING_SNAKE_CASE      = target

											self.depth_first_search(A_				, node.value	)
											self.path_sum(node.left	)
											self.path_sum(node.right	)

											return self.paths


if __name__ == "__main__":
							import doctest

							doctest.testmod()




from __future__ import annotations

from collections import Counter


def 				SCREAMING_SNAKE_CASE (     UpperCAmelCase__							):

				"""simple docstring"""






				_SCREAMING_SNAKE_CASE      = [True] * n
				_SCREAMING_SNAKE_CASE      = False
				_SCREAMING_SNAKE_CASE      = False
				_SCREAMING_SNAKE_CASE      = True

				for i in range(3   ,int(n**0.5 + 1							)   ,2							):
								_SCREAMING_SNAKE_CASE      = i * 2
								while index < n:
												_SCREAMING_SNAKE_CASE      = False
												_SCREAMING_SNAKE_CASE      = index + i

				_SCREAMING_SNAKE_CASE      = [2]

				for i in range(3   ,UpperCAmelCase__   ,2							):
								if is_prime[i]:
												primes.append(UpperCAmelCase__							)

				return primes


def 				SCREAMING_SNAKE_CASE (     UpperCAmelCase__							):

				"""simple docstring"""






				_SCREAMING_SNAKE_CASE      = str(UpperCAmelCase__							)
				_SCREAMING_SNAKE_CASE      = []
				_SCREAMING_SNAKE_CASE      = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

				for duplicate in Counter(UpperCAmelCase__							) - Counter(set(UpperCAmelCase__							)							):
								_SCREAMING_SNAKE_CASE      = [int(number_str.replace(UpperCAmelCase__   ,UpperCAmelCase__							)							) for digit in digits]
								replacements.append(UpperCAmelCase__							)

				return replacements


def 				SCREAMING_SNAKE_CASE (     UpperCAmelCase__ = 8							):

				"""simple docstring"""






				_SCREAMING_SNAKE_CASE      = set()

				# Filter primes with less than 3 replaceable digits
				_SCREAMING_SNAKE_CASE      = {
				    x for x in set(prime_sieve(100_0000							)							) if len(str(UpperCAmelCase__							)							) - len(set(str(UpperCAmelCase__							)							)							) >= 3
				}

				for prime in primes:
								if prime in numbers_checked:
												continue

								_SCREAMING_SNAKE_CASE      = digit_replacements(UpperCAmelCase__							)

								for family in replacements:
												numbers_checked.update(UpperCAmelCase__							)
												_SCREAMING_SNAKE_CASE      = primes.intersection(UpperCAmelCase__							)

												if len(UpperCAmelCase__							) != family_length:
																continue

												return min(UpperCAmelCase__							)

				return -1


if __name__ == "__main__":
							print(solution())
