






'''simple docstring'''



# using dfs for finding eulerian path traversal



def  __UpperCAmelCase						(					SCREAMING_SNAKE_CASE__:						int,       SCREAMING_SNAKE_CASE__:						str,       SCREAMING_SNAKE_CASE__:						List[Any],       SCREAMING_SNAKE_CASE__:						str=None     )	->      List[str]:

   """simple docstring"""
   __a					  =     (path or []) + [u]
   for v in graph[u]:
      if visited_edge[u][v] is False:
         __a  ,      __a					  =     True, True
         __a					  =     dfs(SCREAMING_SNAKE_CASE__,       SCREAMING_SNAKE_CASE__,       SCREAMING_SNAKE_CASE__,       SCREAMING_SNAKE_CASE__     )
   return path



def  __UpperCAmelCase						(					SCREAMING_SNAKE_CASE__:						int,       SCREAMING_SNAKE_CASE__:						str     )	->      List[str]:

   """simple docstring"""
   __a					  =     0
   __a					  =     -1
   for i in range(SCREAMING_SNAKE_CASE__     ):
      if i not in graph.keys():
         continue
      if len(graph[i]     ) % 2 == 1:
         odd_degree_nodes += 1
         __a					  =     i
   if odd_degree_nodes == 0:
      return 1, odd_node
   if odd_degree_nodes == 2:
      return 2, odd_node
   return 3, odd_node



def  __UpperCAmelCase						(					SCREAMING_SNAKE_CASE__:						Optional[int],       SCREAMING_SNAKE_CASE__:						Dict     )	->      str:

   """simple docstring"""
   __a					  =     [[False for _ in range(max_node + 1     )] for _ in range(max_node + 1     )]
   __a  ,      __a					  =     check_circuit_or_path(SCREAMING_SNAKE_CASE__,       SCREAMING_SNAKE_CASE__     )
   if check == 3:
      print('graph is not Eulerian'     )
      print('no path'     )
      return
   __a					  =     1
   if check == 2:
      __a					  =     odd_node
      print('graph has a Euler path'     )
   if check == 1:
      print('graph has a Euler cycle'     )
   __a					  =     dfs(SCREAMING_SNAKE_CASE__,       SCREAMING_SNAKE_CASE__,       SCREAMING_SNAKE_CASE__     )
   print(SCREAMING_SNAKE_CASE__     )



def  __UpperCAmelCase						(					)	->      List[Any]:

   """simple docstring"""
   __a					  =     {1: [2, 3, 4], 2: [1, 3], 3: [1, 2], 4: [1, 5], 5: [4]}
   __a					  =     {1: [2, 3, 4, 5], 2: [1, 3], 3: [1, 2], 4: [1, 5], 5: [1, 4]}
   __a					  =     {1: [2, 3, 4], 2: [1, 3, 4], 3: [1, 2], 4: [1, 2, 5], 5: [4]}
   __a					  =     {1: [2, 3], 2: [1, 3], 3: [1, 2]}
   __a					  =     {
       1: [],
       2: []
       # all degree is zero
   }
   __a					  =     10
   check_euler(SCREAMING_SNAKE_CASE__,       SCREAMING_SNAKE_CASE__     )
   check_euler(SCREAMING_SNAKE_CASE__,       SCREAMING_SNAKE_CASE__     )
   check_euler(SCREAMING_SNAKE_CASE__,       SCREAMING_SNAKE_CASE__     )
   check_euler(SCREAMING_SNAKE_CASE__,       SCREAMING_SNAKE_CASE__     )
   check_euler(SCREAMING_SNAKE_CASE__,       SCREAMING_SNAKE_CASE__     )


if __name__ == "__main__":
 main()







'''simple docstring'''



def  __UpperCAmelCase						(					SCREAMING_SNAKE_CASE__:						str     )	->      bool:

   """simple docstring"""
   if not all(x.isalpha() for x in string     ):
      raise ValueError('String must only contain alphabetic characters.'     )

   __a					  =     sorted(string.lower()     )
   return len(SCREAMING_SNAKE_CASE__     ) == len(set(SCREAMING_SNAKE_CASE__     )     )


if __name__ == "__main__":
 __UpperCamelCase   :							int         =   input("""Enter a string """).strip()

 __UpperCamelCase   :							Tuple         =   is_isogram(input_str)
 print(f"""{input_str} is {"an" if isogram else "not an"} isogram.""")