



def  _lowerCAmelCase     (_lowerCAmelCase ,						_lowerCAmelCase):
					if a < b:
										return gcd(_lowerCAmelCase ,						_lowerCAmelCase)
					if a % b == 0:
										return b
					return gcd(_lowerCAmelCase ,						a % b)



def  _lowerCAmelCase     (_lowerCAmelCase ,						_lowerCAmelCase ,						_lowerCAmelCase):
					if y == 0:
										return 1
					UpperCamelCase_			= power(_lowerCAmelCase ,						y // 2 ,						_lowerCAmelCase) % mod
					UpperCamelCase_			= (temp * temp) % mod
					if y % 2 == 1:
										UpperCamelCase_			= (temp * x) % mod
					return temp



def  _lowerCAmelCase     (_lowerCAmelCase):
					UpperCamelCase_			= 2
					while b < n:
										if gcd(_lowerCAmelCase ,						_lowerCAmelCase) == 1 and power(_lowerCAmelCase ,						n - 1 ,						_lowerCAmelCase) != 1:
															return False
										b += 1
					return True


if __name__ == "__main__":
	UpperCAmelCase :				Tuple							=int(input("""Enter number: """).strip())
	if is_carmichael_number(number):
		print(F"{number} is a Carmichael Number.")
	else:
		print(F"{number} is not a Carmichael Number.")


"""simple docstring"""
from __future__ import annotations

import random

# Adjacency list representation of this graph:
# https://en.wikipedia.org/wiki/File:Single_run_of_Karger%E2%80%99s_Mincut_algorithm.svg
_a   :      List[str]       =				{
    """1""": ["""2""", """3""", """4""", """5"""],
    """2""": ["""1""", """3""", """4""", """5"""],
    """3""": ["""1""", """2""", """4""", """5""", """10"""],
    """4""": ["""1""", """2""", """3""", """5""", """6"""],
    """5""": ["""1""", """2""", """3""", """4""", """7"""],
    """6""": ["""7""", """8""", """9""", """10""", """4"""],
    """7""": ["""6""", """8""", """9""", """10""", """5"""],
    """8""": ["""6""", """7""", """9""", """10"""],
    """9""": ["""6""", """7""", """8""", """10"""],
    """10""": ["""6""", """7""", """8""", """9""", """3"""],
}
def 					a__ ( a :					dict[str, list[str]]		):

  """simple docstring"""







  _snake_case  :    List[Any]            = {node: {node} for node in graph}

  _snake_case  :    str            = {node: graph[node][:] for node in graph}

  while len(a		) > 2:
    # Choose a random edge.
    _snake_case  :    str            = random.choice(list(graph_copy.keys()		)		)
    _snake_case  :    Union[str, Any]            = random.choice(graph_copy[u]		)

    # Contract edge (u, v) to new node uv
    _snake_case  :    Union[str, Any]            = u + v
    _snake_case  :    Union[str, Any]            = list(set(graph_copy[u] + graph_copy[v]		)		)
    uv_neighbors.remove(a		)
    uv_neighbors.remove(a		)
    _snake_case  :    Union[str, Any]            = uv_neighbors
    for neighbor in uv_neighbors:
      graph_copy[neighbor].append(a		)

    _snake_case  :    Dict            = set(contracted_nodes[u].union(contracted_nodes[v]		)		)

    # Remove nodes u and v.
    del graph_copy[u]
    del graph_copy[v]
    for neighbor in uv_neighbors:
      if u in graph_copy[neighbor]:
        graph_copy[neighbor].remove(a		)
      if v in graph_copy[neighbor]:
        graph_copy[neighbor].remove(a		)

    # Find cutset.
  _snake_case  :    List[Any]            = [contracted_nodes[node] for node in graph_copy]
  return {
      (node, neighbor)
      for node in groups[0]
      for neighbor in graph[node]
      if neighbor in groups[1]
  }


if __name__ == "__main__":
    print(partition_graph(TEST_GRAPH))

