
"""simple docstring"""
__magic_name__		       =				[
    ['''ab-e1''', '''ac-e3''', '''ad-e5''', '''bc-e4''', '''bd-e2''', '''be-e6''', '''bh-e12''', '''cd-e2''', '''ce-e4''',
     '''de-e1''', '''df-e8''', '''dg-e5''', '''dh-e10''', '''ef-e3''', '''eg-e2''', '''fg-e6''', '''gh-e6''', '''hi-e3'''],
    ['''ab-e1''', '''ac-e3''', '''ad-e5''', '''bc-e4''', '''bd-e2''', '''be-e6''', '''cd-e2''', '''de-e1''', '''df-e8''',
     '''ef-e3''', '''eg-e2''', '''fg-e6'''],
    ['''ab-e1''', '''ac-e3''', '''bc-e4''', '''bd-e2''', '''de-e1''', '''df-e8''', '''dg-e5''', '''ef-e3''', '''eg-e2''',
     '''eh-e12''', '''fg-e6''', '''fh-e10''', '''gh-e6'''],
    ['''ab-e1''', '''ac-e3''', '''bc-e4''', '''bd-e2''', '''bh-e12''', '''cd-e2''', '''df-e8''', '''dh-e10'''],
    ['''ab-e1''', '''ac-e3''', '''ad-e5''', '''bc-e4''', '''bd-e2''', '''cd-e2''', '''ce-e4''', '''de-e1''', '''df-e8''',
     '''dg-e5''', '''ef-e3''', '''eg-e2''', '''fg-e6''']
]




def     __lowerCamelCase  (		UpperCamelCase__      ):


	"""simple docstring"""






	_UpperCAmelCase =						set()
	for row in edge_array:
		for item in row:
			distinct_edge.add(item[0]      )
	return list(UpperCamelCase__      )




def     __lowerCamelCase  (		UpperCamelCase__				,     UpperCamelCase__      ):


	"""simple docstring"""






	_UpperCAmelCase =						["0"] * len(UpperCamelCase__      )
	for i, row in enumerate(UpperCamelCase__      ):
		for item in row:
			if distinct_edge in item[0]:
				_UpperCAmelCase =						"1"
				break
	return "".join(UpperCamelCase__      )




def     __lowerCamelCase  (		UpperCamelCase__      ):


	"""simple docstring"""






	_UpperCAmelCase =						get_distinct_edge(UpperCamelCase__      )
	_UpperCAmelCase =						{}

	for item in distinct_edge:
		_UpperCAmelCase =						get_bitcode(UpperCamelCase__				,     UpperCamelCase__      )
		# print('bit',bit)
		# bt=''.join(bit)
		_UpperCAmelCase =						bit.count("1"      )
		_UpperCAmelCase =						[s, bit]
	# Store [Distinct edge, WT(Bitcode), Bitcode] in descending order
	_UpperCAmelCase =						[
	    [k, v[0], v[1]]
	    for k, v in sorted(frequency_table.items()				,     key=lambda UpperCamelCase__      : v[1][0]				,     reverse=UpperCamelCase__      )
	]
	return sorted_frequency_table




def     __lowerCamelCase  (		UpperCamelCase__      ):


	"""simple docstring"""






	_UpperCAmelCase =						{}
	for _, item in enumerate(UpperCamelCase__      ):
		nodes.setdefault(item[2]				,     []      ).append(item[0]      )
	return nodes




def     __lowerCamelCase  (		UpperCamelCase__      ):


	"""simple docstring"""






	_UpperCAmelCase =						{}
	for key, value in nodes.items():
		_UpperCAmelCase =						value
	return cluster




def     __lowerCamelCase  (		UpperCamelCase__      ):


	"""simple docstring"""






	return [i * 100 / len(UpperCamelCase__      ) for i in cluster]




def     __lowerCamelCase  (		):


	"""simple docstring"""






	print("\nNodes\n"      )
	for key, value in nodes.items():
		print(UpperCamelCase__				,     UpperCamelCase__      )
	print("\nSupport\n"      )
	print(UpperCamelCase__      )
	print("\n Cluster \n"      )
	for key, value in sorted(cluster.items()				,     reverse=UpperCamelCase__      ):
		print(UpperCamelCase__				,     UpperCamelCase__      )
	print("\n Graph\n"      )
	for key, value in graph.items():
		print(UpperCamelCase__				,     UpperCamelCase__      )
	print("\n Edge List of Frequent subgraphs \n"      )
	for edge_list in freq_subgraph_edge_list:
		print(UpperCamelCase__      )




def     __lowerCamelCase  (		UpperCamelCase__				,     UpperCamelCase__				,     UpperCamelCase__				,     UpperCamelCase__      ):


	"""simple docstring"""






	for i in cluster[ca]:
		_UpperCAmelCase =						0
		_UpperCAmelCase =						ca + 1
		while ca < max(cluster.keys()      ):
			for j in cluster[ca]:
				if int(UpperCamelCase__				,     2      ) & int(UpperCamelCase__				,     2      ) == int(UpperCamelCase__				,     2      ):
					if tuple(nodes[i]      ) in graph:
						graph[tuple(nodes[i]      )].append(nodes[j]      )
					else:
						_UpperCAmelCase =						[nodes[j]]
					count += 1
			if count == 0:
				_UpperCAmelCase =						ca + 1
			else:
				break




def     __lowerCamelCase  (		UpperCamelCase__				,     UpperCamelCase__      ):


	"""simple docstring"""






	_UpperCAmelCase =						cluster[max(cluster.keys()      )]
	_UpperCAmelCase =						"Header"
	_UpperCAmelCase =						{}
	for i in x:
		if (["Header"],) in graph:
			graph[(["Header"],)].append(x[i]      )
		else:
			_UpperCAmelCase =						[x[i]]
	for i in x:
		_UpperCAmelCase =						[["Header"]]
	_UpperCAmelCase =						1
	while i < max(UpperCamelCase__      ) - 1:
		create_edge(UpperCamelCase__				,     UpperCamelCase__				,     UpperCamelCase__				,     UpperCamelCase__      )
		_UpperCAmelCase =						i + 1
	return graph




def     __lowerCamelCase  (		UpperCamelCase__				,     UpperCamelCase__				,     UpperCamelCase__				,     UpperCamelCase__=None      ):


	"""simple docstring"""






	_UpperCAmelCase =						(path or []) + [start]
	if start == end:
		paths.append(UpperCamelCase__      )
	for node in graph[start]:
		if tuple(UpperCamelCase__      ) not in path:
			my_dfs(UpperCamelCase__				,     tuple(UpperCamelCase__      )				,     UpperCamelCase__				,     UpperCamelCase__      )




def     __lowerCamelCase  (		UpperCamelCase__				,     UpperCamelCase__				,     UpperCamelCase__      ):


	"""simple docstring"""






	_UpperCAmelCase =						int(s / 100 * (len(UpperCamelCase__      ) - 1)      )
	for i in cluster[k]:
		my_dfs(UpperCamelCase__				,     tuple(cluster[k][i]      )				,     (["Header"],)      )




def     __lowerCamelCase  (		UpperCamelCase__      ):


	"""simple docstring"""






	_UpperCAmelCase =						[]
	for edges in paths:
		_UpperCAmelCase =						[]
		for j in range(len(UpperCamelCase__      ) - 1      ):
			_UpperCAmelCase =						list(edges[j]      )
			for e in temp:
				_UpperCAmelCase =						(e[0], e[1])
				el.append(UpperCamelCase__      )
		freq_sub_el.append(UpperCamelCase__      )
	return freq_sub_el




def     __lowerCamelCase  (		UpperCamelCase__      ):


	"""simple docstring"""






	for i in range(len(UpperCamelCase__      )      ):
		for j in range(len(edge_array[i]      )      ):
			_UpperCAmelCase =						edge_array[i][j].split("-"      )
			_UpperCAmelCase =						t


if __name__ == "__main__":
	preprocess(edge_array)
	__magic_name__		       =				get_frequency_table(edge_array)
	__magic_name__		       =				get_nodes(frequency_table)
	__magic_name__		       =				get_cluster(nodes)
	__magic_name__		       =				get_support(cluster)
	__magic_name__		       =				construct_graph(cluster, nodes)
	find_freq_subgraph_given_support(60, cluster, graph)
	__magic_name__		       =				[]
	__magic_name__		       =				freq_subgraphs_edge_list(paths)
	print_all()






"""simple docstring"""
def     __lowerCamelCase  (		UpperCamelCase__ = 400_0000      ):


	"""simple docstring"""






	_UpperCAmelCase =						1
	_UpperCAmelCase =						2
	_UpperCAmelCase =						0
	while j <= n:
		if j % 2 == 0:
			total += j
		_UpperCAmelCase ,      _UpperCAmelCase =						j, i + j

	return total


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




