"""simple docstring"""




from functools import lru_cache





def 							SCREAMING_SNAKE_CASE     (			_lowerCamelCase						:       int	)       ->      set:
  _lowerCAmelCase						:       Optional[int]  			=     2
  _lowerCAmelCase						:       List[Any]  			=     set()
  while i * i <= n:
    if n % i:
      i += 1
    else:
      n //= i
      factors.add(_lowerCamelCase	)
  if n > 1:
    factors.add(_lowerCamelCase	)
  return factors





@lru_cache
def 							SCREAMING_SNAKE_CASE     (			_lowerCamelCase						:       int	)       ->      int:
  return len(unique_prime_factors(_lowerCamelCase	)	)





def 							SCREAMING_SNAKE_CASE     (			_lowerCamelCase						:       list	)       ->      bool:
  return len(set(_lowerCamelCase	)	) in (0, 1)





def 							SCREAMING_SNAKE_CASE     (			_lowerCamelCase						:       int	)       ->      list:
  _lowerCAmelCase						:       Any  			=     2

  while True:
    # Increment each value of a generated range
    _lowerCAmelCase						:       str  			=     [base + i for i in range(_lowerCamelCase	)]

    # Run elements through out unique_prime_factors function
    # Append our target number to the end.
    _lowerCAmelCase						:       List[str]  			=     [upf_len(_lowerCamelCase	) for x in group]
    checker.append(_lowerCamelCase	)

    # If all numbers in the list are equal, return the group variable.
    if equality(_lowerCamelCase	):
      return group

    # Increment our base variable by 1
    base += 1





def 							SCREAMING_SNAKE_CASE     (			_lowerCamelCase						:       int = 4	)       ->      int:
  _lowerCAmelCase						:       Optional[Any]  			=     run(_lowerCamelCase	)
  return results[0] if len(_lowerCamelCase	) else None


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





"""simple docstring"""




from math import ceil





def 							SCREAMING_SNAKE_CASE     (			_lowerCamelCase						:       Union[str, Any]			,_lowerCamelCase						:       Union[str, Any]	)       ->      int:
  _lowerCAmelCase						:       Dict  			=     list(range(0			,_lowerCamelCase	)	)

  _lowerCAmelCase						:       Tuple  			=     [item for sublist in list(device_map.values()	) for item in sublist]

  # Duplicate check
  _lowerCAmelCase						:       Union[str, Any]  			=     []
  for i in device_map_blocks:
    if device_map_blocks.count(_lowerCamelCase	) > 1 and i not in duplicate_blocks:
      duplicate_blocks.append(_lowerCamelCase	)
    # Missing blocks
  _lowerCAmelCase						:       int  			=     [i for i in blocks if i not in device_map_blocks]
  _lowerCAmelCase						:       List[Any]  			=     [i for i in device_map_blocks if i not in blocks]

  if len(_lowerCamelCase	) != 0:
    raise ValueError(
        """Duplicate attention blocks specified in device_map. Attention blocks must be specified to one device."""
        """ These attention blocks were specified more than once: """ + str(_lowerCamelCase	)	)
  if len(_lowerCamelCase	) != 0:
    raise ValueError(
        """There are attention blocks for this model that are not specified in the device_map. Add these attention """
        """blocks to a device on the device_map: """ + str(_lowerCamelCase	)	)
  if len(_lowerCamelCase	) != 0:
    raise ValueError(
        """The device_map contains more attention blocks than this model has. Remove these from the device_map:"""
        + str(_lowerCamelCase	)	)






def 							SCREAMING_SNAKE_CASE     (			_lowerCamelCase						:       int			,_lowerCamelCase						:       Tuple	)       ->      str:
  _lowerCAmelCase						:       Optional[Any]  			=     list(range(_lowerCamelCase	)	)
  _lowerCAmelCase						:       Optional[Any]  			=     int(ceil(n_layers / len(_lowerCamelCase	)	)	)
  _lowerCAmelCase						:       Optional[int]  			=     [layers[i : i + n_blocks] for i in range(0			,_lowerCamelCase			,_lowerCamelCase	)]

  return dict(zip(_lowerCamelCase			,_lowerCamelCase	)	)




