





"""simple docstring"""





import functools
from typing import Any
def  __A   (_SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE			)					->bool:





  """simple docstring"""


  if not isinstance(_SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE			) or len(_SCREAMING_SNAKE_CASE			) == 0:
    raise ValueError('the string should be not empty string'			)

  if not isinstance(_SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE			) or not all(
      isinstance(_SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE			) and len(_SCREAMING_SNAKE_CASE			) > 0 for item in words			):
    raise ValueError('the words should be a list of non-empty strings'			)

  # Build trie
  lowerCAmelCase__			:dict[str, Any]											=							{}
  lowerCAmelCase__			:List[Any]											=							'WORD_KEEPER'

  for word in words:
    lowerCAmelCase__			:Any											=							trie
    for c in word:
      if c not in trie_node:
        lowerCAmelCase__			:Union[str, Any]											=							{}

      lowerCAmelCase__			:Any											=							trie_node[c]

    lowerCAmelCase__			:str											=							True

  lowerCAmelCase__			:Optional[int]											=							len(_SCREAMING_SNAKE_CASE			)

  # Dynamic programming method
  @functools.cache
  def is_breakable(_SCREAMING_SNAKE_CASE			) -> bool:
    if index == len_string:
      return True

    lowerCAmelCase__			:Union[str, Any]											=							trie
    for i in range(_SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE			):
      lowerCAmelCase__			:Dict											=							trie_node.get(string[i]     ,   _SCREAMING_SNAKE_CASE			)

      if trie_node is None:
        return False

      if trie_node.get(_SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE			) and is_breakable(i + 1			):
        return True

    return False

  return is_breakable(0			)


if __name__ == "__main__":
  import doctest

  doctest.testmod()







"""simple docstring"""





from __future__ import annotations

__A											=		1.6_021e-19  # units = C
def  __A   (_SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE     ,   )					->tuple[str, float]:





  """simple docstring"""


  if (conductivity, electron_conc, mobility).count(0			) != 1:
    raise ValueError('You cannot supply more or less than 2 values'			)
  elif conductivity < 0:
    raise ValueError('Conductivity cannot be negative'			)
  elif electron_conc < 0:
    raise ValueError('Electron concentration cannot be negative'			)
  elif mobility < 0:
    raise ValueError('mobility cannot be negative'			)
  elif conductivity == 0:
    return (
        "conductivity",
        mobility * electron_conc * ELECTRON_CHARGE,
    )
  elif electron_conc == 0:
    return (
        "electron_conc",
        conductivity / (mobility * ELECTRON_CHARGE),
    )
  else:
    return (
        "mobility",
        conductivity / (electron_conc * ELECTRON_CHARGE),
    )


if __name__ == "__main__":
  import doctest

  doctest.testmod()
