"""simple docstring"""




def 							_UpperCAmelCase		(       lowerCamelCase__     ):





		"""simple docstring"""




		lowerCAmelCase__        =   set()
		# edges = list of graph's edges
		lowerCAmelCase__        =   get_edges(lowerCamelCase__     )

		# While there are still elements in edges list, take an arbitrary edge
		# (from_node, to_node) and add his extremity to chosen_vertices and then
		# remove all arcs adjacent to the from_node and to_node
		while edges:
				lowerCAmelCase__   ,					lowerCAmelCase__        =   edges.pop()
				chosen_vertices.add(lowerCamelCase__     )
				chosen_vertices.add(lowerCamelCase__     )
				for edge in edges.copy():
						if from_node in edge or to_node in edge:
								edges.discard(lowerCamelCase__     )
		return chosen_vertices







def 							_UpperCAmelCase		(       lowerCamelCase__     ):





		"""simple docstring"""




		lowerCAmelCase__        =   set()
		for from_node, to_nodes in graph.items():
				for to_node in to_nodes:
						edges.add((from_node, to_node)     )
		return edges


if __name__ == "__main__":
			import doctest

			doctest.testmod()

			# graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]}
			# print(f"Matching vertex cover:\n{matching_min_vertex_cover(graph)}")





"""simple docstring"""




def 							_UpperCAmelCase		(       lowerCamelCase__ = 50     ):





		"""simple docstring"""




		lowerCAmelCase__        =   [[0] * 3 for _ in range(length + 1     )]

		for row_length in range(length + 1     ):
				for tile_length in range(2			,  5     ):
						for tile_start in range(row_length - tile_length + 1     ):
								different_colour_ways_number[row_length][tile_length - 2] += (
								    different_colour_ways_number[row_length - tile_start - tile_length][
								        tile_length - 2
								    ]
								    + 1
								)

		return sum(different_colour_ways_number[length]     )


if __name__ == "__main__":
			print(F"{solution() = }")




