
'''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
lowerCAmelCase_			:			int			   =     {
    '''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  (    lowerCAmelCase_       ):
     _UpperCAmelCase					:  Optional[Any]         =    {node: {node} for node in graph}

     _UpperCAmelCase					:  List[str]         =    {node: graph[node][:] for node in graph}

     while len(lowerCAmelCase_       ) > 2:
          # Choose a random edge.
          _UpperCAmelCase					:  List[str]         =    random.choice(list(graph_copy.keys()       )       )
          _UpperCAmelCase					:  int         =    random.choice(graph_copy[u]       )

          # Contract edge (u, v) to new node uv
          _UpperCAmelCase					:  List[Any]         =    u + v
          _UpperCAmelCase					:  Dict         =    list(set(graph_copy[u] + graph_copy[v]       )       )
          uv_neighbors.remove(lowerCAmelCase_       )
          uv_neighbors.remove(lowerCAmelCase_       )
          _UpperCAmelCase					:  List[Any]         =    uv_neighbors
          for neighbor in uv_neighbors:
               graph_copy[neighbor].append(lowerCAmelCase_       )

          _UpperCAmelCase					:  Union[str, Any]         =    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(lowerCAmelCase_       )
               if v in graph_copy[neighbor]:
                    graph_copy[neighbor].remove(lowerCAmelCase_       )

    # Find cutset.
     _UpperCAmelCase					:  Tuple         =    [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))




'''simple docstring'''

from itertools import permutations







def __A  (    ):
     _UpperCAmelCase					:  Union[str, Any]         =    list(map("""""".join ,       permutations("""0123456789"""       )       )       )
     return result[99_9999]


if __name__ == "__main__":
   print(solution())


