
"""simple docstring"""





def       __a	(						__lowerCamelCase,						__lowerCamelCase    ):
   UpperCAmelCase_   :   str     	=       sorted(__lowerCamelCase,						key=lambda __lowerCamelCase    : edge[2]    )

   UpperCAmelCase_   :   Union[str, Any]     	=       list(range(__lowerCamelCase    )    )

   def find_parent(__lowerCamelCase    ):
      if i != parent[i]:
         UpperCAmelCase_   :   str     	=       find_parent(parent[i]    )
      return parent[i]

   UpperCAmelCase_   :   Union[str, Any]     	=       0
   UpperCAmelCase_   :   Optional[Any]     	=       []

   for edge in edges:
      UpperCAmelCase_   :   Optional[int]     	=       find_parent(edge[0]    )
      UpperCAmelCase_   :   List[str]     	=       find_parent(edge[1]    )
      if parent_a != parent_b:
         minimum_spanning_tree_cost += edge[2]
         minimum_spanning_tree.append(__lowerCamelCase    )
         UpperCAmelCase_   :   Union[str, Any]     	=       parent_b

   return minimum_spanning_tree


if __name__ == "__main__":  # pragma: no cover
    _a			,			_a									=				list(map(int, input().strip().split()))
    _a									=				[]

    for _ in range(num_edges):
        _a			,			_a			,			_a									=				(int(x) for x in input().strip().split())
        edges.append((nodea, nodea, cost))

    kruskal(num_nodes, edges)










import numpy as np


def __A       ( __lowerCAmelCase					,						__lowerCAmelCase					,						__lowerCAmelCase      )->    str:





						"""simple docstring"""



						_UpperCAmelCase							   =     n_draws * class_counts / class_counts.sum()
						# floored means we don't overshoot n_samples, but probably undershoot
						_UpperCAmelCase							   =     np.floor(__lowerCAmelCase      )
						# we add samples according to how much "left over" probability
						# they had, until we arrive at n_samples
						_UpperCAmelCase							   =     int(n_draws - floored.sum()      )
						if need_to_add > 0:
												_UpperCAmelCase							   =     continuous - floored
												_UpperCAmelCase							   =     np.sort(np.unique(__lowerCAmelCase      )      )[::-1]
												# add according to remainder, but break ties
												# randomly to avoid biases
												for value in values:
																		((_UpperCAmelCase)   ,					)							   =     np.where(remainder == value      )
																		# if we need_to_add less than what's in inds
																		# we draw randomly from them.
																		# if we need to add more, we add them all and
																		# go to the next value
																		_UpperCAmelCase							   =     min(len(__lowerCAmelCase      )					,						__lowerCAmelCase      )
																		_UpperCAmelCase							   =     rng.choice(__lowerCAmelCase					,						size=__lowerCAmelCase					,						replace=__lowerCAmelCase      )
																		floored[inds] += 1
																		need_to_add -= add_now
																		if need_to_add == 0:
																								break
						return floored.astype(np.intaa      )


def __A       ( __lowerCAmelCase					,						__lowerCAmelCase					,						__lowerCAmelCase					,						__lowerCAmelCase					,						__lowerCAmelCase=10      )->    int:





						"""simple docstring"""



						_UpperCAmelCase   ,					_UpperCAmelCase							   =     np.unique(__lowerCAmelCase					,						return_inverse=__lowerCAmelCase      )
						_UpperCAmelCase							   =     classes.shape[0]
						_UpperCAmelCase							   =     np.bincount(__lowerCAmelCase      )
						if np.min(__lowerCAmelCase      ) < 2:
												raise ValueError('Minimum class count error'      )
						if n_train < n_classes:
												raise ValueError(
												    'The train_size = %d should be greater or ' 'equal to the number of classes = %d' % (n_train, n_classes)      )
						if n_test < n_classes:
												raise ValueError(
												    'The test_size = %d should be greater or ' 'equal to the number of classes = %d' % (n_test, n_classes)      )
						_UpperCAmelCase							   =     np.split(np.argsort(__lowerCAmelCase					,						kind='mergesort'      )					,						np.cumsum(__lowerCAmelCase      )[:-1]      )
						for _ in range(__lowerCAmelCase      ):
												_UpperCAmelCase							   =     approximate_mode(__lowerCAmelCase					,						__lowerCAmelCase					,						__lowerCAmelCase      )
												_UpperCAmelCase							   =     class_counts - n_i
												_UpperCAmelCase							   =     approximate_mode(__lowerCAmelCase					,						__lowerCAmelCase					,						__lowerCAmelCase      )

												_UpperCAmelCase							   =     []
												_UpperCAmelCase							   =     []

												for i in range(__lowerCAmelCase      ):
																		_UpperCAmelCase							   =     rng.permutation(class_counts[i]      )
																		_UpperCAmelCase							   =     class_indices[i].take(__lowerCAmelCase					,						mode='clip'      )
																		train.extend(perm_indices_class_i[: n_i[i]]      )
																		test.extend(perm_indices_class_i[n_i[i] : n_i[i] + t_i[i]]      )
												_UpperCAmelCase							   =     rng.permutation(__lowerCAmelCase      )
												_UpperCAmelCase							   =     rng.permutation(__lowerCAmelCase      )

												yield train, test
