code: 
  
  import os
  import sys
  import time
  
  from . import transposition_cipher as trans_cipher
  
  
  
  def  _A  (			):
  	UpperCAmelCase__:  Union[str, Any]		       =   "Prehistoric Men.txt"
  	UpperCAmelCase__:  Dict		       =   "Output.txt"
  	UpperCAmelCase__:  List[Any]		       =   int(input("Enter key: "			)			)
  	UpperCAmelCase__:  List[str]		       =   input("Encrypt/Decrypt [e/d]: "			)
  
  	if not os.path.exists(SCREAMING_SNAKE_CASE			):
  		print(f"File {input_file} does not exist. Quitting..."			)
  		sys.exit()
  	if os.path.exists(SCREAMING_SNAKE_CASE			):
  		print(f"Overwrite {output_file}? [y/n]"			)
  		UpperCAmelCase__:  Tuple		       =   input("> "			)
  		if not response.lower().startswith("y"			):
  			sys.exit()
  
  	UpperCAmelCase__:  str		       =   time.time()
  	if mode.lower().startswith("e"			):
  		with open(SCREAMING_SNAKE_CASE			) as f:
  			UpperCAmelCase__:  List[Any]		       =   f.read()
  		UpperCAmelCase__:  Union[str, Any]		       =   trans_cipher.encrypt_message(SCREAMING_SNAKE_CASE  ,SCREAMING_SNAKE_CASE			)
  	elif mode.lower().startswith("d"			):
  		with open(SCREAMING_SNAKE_CASE			) as f:
  			UpperCAmelCase__:  Dict		       =   f.read()
  		UpperCAmelCase__:  int		       =   trans_cipher.decrypt_message(SCREAMING_SNAKE_CASE  ,SCREAMING_SNAKE_CASE			)
  
  	with open(SCREAMING_SNAKE_CASE  ,"w"			) as output_obj:
  		output_obj.write(SCREAMING_SNAKE_CASE			)
  
  	UpperCAmelCase__:  Union[str, Any]		       =   round(time.time() - start_time  ,2			)
  	print(("Done (", total_time, "seconds )")			)
  
  
  if __name__ == "__main__":
  					main()
style_context: 
  
  from __future__ import annotations
  
  from collections import Counter
  
  
  
  def  _A  (			SCREAMING_SNAKE_CASE			):
  	UpperCAmelCase__:  Optional[Any]		       =   [True] * n
  	UpperCAmelCase__:  Any		       =   False
  	UpperCAmelCase__:  Tuple		       =   False
  	UpperCAmelCase__:  Optional[Any]		       =   True
  
  	for i in range(3  ,int(n**0.5 + 1			)  ,2			):
  		UpperCAmelCase__:  Any		       =   i * 2
  		while index < n:
  			UpperCAmelCase__:  Optional[int]		       =   False
  			UpperCAmelCase__:  Tuple		       =   index + i
  
  	UpperCAmelCase__:  int		       =   [2]
  
  	for i in range(3  ,SCREAMING_SNAKE_CASE  ,2			):
  		if is_prime[i]:
  			primes.append(SCREAMING_SNAKE_CASE			)
  
  	return primes
  
  
  
  def  _A  (			SCREAMING_SNAKE_CASE			):
  	UpperCAmelCase__:  List[Any]		       =   str(SCREAMING_SNAKE_CASE			)
  	UpperCAmelCase__:  Tuple		       =   []
  	UpperCAmelCase__:  Optional[int]		       =   ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
  
  	for duplicate in Counter(SCREAMING_SNAKE_CASE			) - Counter(set(SCREAMING_SNAKE_CASE			)			):
  		UpperCAmelCase__:  Optional[Any]		       =   [int(number_str.replace(SCREAMING_SNAKE_CASE  ,SCREAMING_SNAKE_CASE			)			) for digit in digits]
  		replacements.append(SCREAMING_SNAKE_CASE			)
  
  	return replacements
  
  
  
  def  _A  (			SCREAMING_SNAKE_CASE = 8			):
  	UpperCAmelCase__:  Union[str, Any]		       =   set()
  
  	# Filter primes with less than 3 replaceable digits
  	UpperCAmelCase__:  Optional[Any]		       =   {
  	    x for x in set(prime_sieve(1_0_0_0_0_0_0			)			) if len(str(SCREAMING_SNAKE_CASE			)			) - len(set(str(SCREAMING_SNAKE_CASE			)			)			) >= 3
  	}
  
  	for prime in primes:
  		if prime in numbers_checked:
  			continue
  
  		UpperCAmelCase__:  Optional[int]		       =   digit_replacements(SCREAMING_SNAKE_CASE			)
  
  		for family in replacements:
  			numbers_checked.update(SCREAMING_SNAKE_CASE			)
  			UpperCAmelCase__:  Dict		       =   primes.intersection(SCREAMING_SNAKE_CASE			)
  
  			if len(SCREAMING_SNAKE_CASE			) != family_length:
  				continue
  
  			return min(SCREAMING_SNAKE_CASE			)
  
  	return -1
  
  
  if __name__ == "__main__":
  					print(solution())