§
    bŠtj%­  ã                   óô  — d Z ddlmZmZ ddlZddlmZ g d¢Z ed¦  «         ed¦  «        ej	        d„ ¦   «         ¦   «         ¦   «         Z
d	„ Zej	        d
„ ¦   «         Zej	        d„ ¦   «         Zej	        d„ ¦   «         Z ed¦  «         ed¦  «         ej	        d¬¦  «        dd„¦   «         ¦   «         ¦   «         Z ed¦  «         ed¦  «         ej	        d¬¦  «        dd„¦   «         ¦   «         ¦   «         ZdS )z;Functions for computing and verifying matchings in a graph.é    )ÚcombinationsÚrepeatN)Únot_implemented_for)Úis_matchingÚis_maximal_matchingÚis_perfect_matchingÚmax_weight_matchingÚmin_weight_matchingÚmaximal_matchingÚ
multigraphÚdirectedc                 óæ   — t          ¦   «         }t          ¦   «         }|                      ¦   «         D ]?}|\  }}||vr4||vr0||k    r*|                     |¦  «         |                     |¦  «         Œ@|S )a™  Find a maximal matching in the graph.

    A matching is a subset of edges in which no node occurs more than once.
    A maximal matching cannot add more edges and still be a matching.

    Parameters
    ----------
    G : NetworkX graph
        Undirected graph

    Returns
    -------
    matching : set
        A maximal matching of the graph.

    Examples
    --------
    >>> G = nx.Graph([(1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5)])
    >>> sorted(nx.maximal_matching(G))
    [(1, 2), (3, 5)]

    Notes
    -----
    The algorithm greedily selects a maximal matching M of the graph G
    (i.e. no superset of M exists). It runs in $O(|E|)$ time.
    )ÚsetÚedgesÚaddÚupdate©ÚGÚmatchingÚnodesÚedgeÚuÚvs         úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/networkx/algorithms/matching.pyr   r      s{   € õ< ‰uŒu€HÝ‰EŒE€EØ—’‘	”	ð ð ˆð ‰ˆˆ1Ø�Eˆ>ˆ>˜a u˜n˜n°°a²°Ø�LŠL˜ÑÔÐØ�LŠL˜ÑÔÐøØ€Oó    c                 óÔ   — t          ¦   «         }|                      ¦   «         D ]D}|\  }}||f|v s||v rŒ||k    rt          j        d|› �¦  «        ‚|                     |¦  «         ŒE|S )a?  Converts matching dict format to matching set format

    Converts a dictionary representing a matching (as returned by
    :func:`max_weight_matching`) to a set representing a matching (as
    returned by :func:`maximal_matching`).

    In the definition of maximal matching adopted by NetworkX,
    self-loops are not allowed, so the provided dictionary is expected
    to never have any mapping from a key to itself. However, the
    dictionary is expected to have mirrored key/value pairs, for
    example, key ``u`` with value ``v`` and key ``v`` with value ``u``.

    z%Selfloops cannot appear in matchings )r   ÚitemsÚnxÚNetworkXErrorr   )r   r   r   r   r   s        r   Úmatching_dict_to_setr    <   s€   € õ ‰EŒE€EØ—’Ñ Ô ð ð ˆØ‰ˆˆ1Øˆqˆ6�Uˆ?ˆ?˜d e˜m˜mØØ�Š6ˆ6ÝÔ"Ð#QÈ4Ð#QÐ#QÑRÔRÐRØ�	Š	�$‰ŒˆˆØ€Lr   c                 ó–  — t          |t          ¦  «        rt          |¦  «        }t          ¦   «         }|D ]“}t	          |¦  «        dk    rt          j        d|› �¦  «        ‚|\  }}|| vs|| vrt          j        d|› d�¦  «        ‚||k    r dS |                      ||¦  «        s dS ||v s||v r dS |                     |¦  «         Œ”dS )aÓ  Return True if ``matching`` is a valid matching of ``G``

    A *matching* in a graph is a set of edges in which no two distinct
    edges share a common endpoint. Each node is incident to at most one
    edge in the matching. The edges are said to be independent.

    Parameters
    ----------
    G : NetworkX graph

    matching : dict or set
        A dictionary or set representing a matching. If a dictionary, it
        must have ``matching[u] == v`` and ``matching[v] == u`` for each
        edge ``(u, v)`` in the matching. If a set, it must have elements
        of the form ``(u, v)``, where ``(u, v)`` is an edge in the
        matching.

    Returns
    -------
    bool
        Whether the given set or dictionary represents a valid matching
        in the graph.

    Raises
    ------
    NetworkXError
        If the proposed matching has an edge to a node not in G.
        Or if the matching is not a collection of 2-tuple edges.

    Examples
    --------
    >>> G = nx.Graph([(1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5)])
    >>> nx.is_maximal_matching(G, {1: 3, 2: 4})  # using dict to represent matching
    True

    >>> nx.is_matching(G, {(1, 3), (2, 4)})  # using set to represent matching
    True

    é   úmatching has non-2-tuple edge úmatching contains edge ú with node not in GFT©	Ú
isinstanceÚdictr    r   Úlenr   r   Úhas_edger   r   s         r   r   r   U   sû   € õR �(�DÑ!Ô!ð 2Ý'¨Ñ1Ô1ˆå‰EŒE€EØð ð ˆÝˆt‰9Œ9˜Š>ˆ>ÝÔ"Ð#JÀDÐ#JÐ#JÑKÔKÐKØ‰ˆˆ1Ø�Aˆ:ˆ:˜ !˜˜ÝÔ"Ð#V¸TÐ#VÐ#VÐ#VÑWÔWÐWØ�Š6ˆ6Ø�5�5Ø�zŠz˜!˜QÑÔð 	Ø�5�5Ø�ˆ:ˆ:˜˜e˜˜Ø�5�5Ø�Š�TÑÔÐÐØˆ4r   c                 óR  — t          |t          ¦  «        rt          |¦  «        }t          ¦   «         }t          ¦   «         }|D ]¿}t	          |¦  «        dk    rt          j        d|› �¦  «        ‚|\  }}|| vs|| vrt          j        d|› d�¦  «        ‚||k    r dS |                      ||¦  «        s dS ||v s||v r dS |                     |¦  «         | 	                    |¦  «         | 	                    ||f¦  «         ŒÀ| j
        D ]\  }}||f|vr||vr||vr	||k    r dS ŒdS )ag  Return True if ``matching`` is a maximal matching of ``G``

    A *maximal matching* in a graph is a matching in which adding any
    edge would cause the set to no longer be a valid matching.

    Parameters
    ----------
    G : NetworkX graph

    matching : dict or set
        A dictionary or set representing a matching. If a dictionary, it
        must have ``matching[u] == v`` and ``matching[v] == u`` for each
        edge ``(u, v)`` in the matching. If a set, it must have elements
        of the form ``(u, v)``, where ``(u, v)`` is an edge in the
        matching.

    Returns
    -------
    bool
        Whether the given set or dictionary represents a valid maximal
        matching in the graph.

    Examples
    --------
    >>> G = nx.Graph([(1, 2), (1, 3), (2, 3), (3, 4), (3, 5)])
    >>> nx.is_maximal_matching(G, {(1, 2), (3, 4)})
    True

    r"   r#   r$   r%   FT)r'   r(   r    r   r)   r   r   r*   r   r   r   )r   r   r   r   r   r   r   s          r   r   r   ’   so  € õ> �(�DÑ!Ô!ð 2Ý'¨Ñ1Ô1ˆå‰EŒE€EÝ‰EŒE€EØð ð ˆÝˆt‰9Œ9˜Š>ˆ>ÝÔ"Ð#JÀDÐ#JÐ#JÑKÔKÐKØ‰ˆˆ1Ø�Aˆ:ˆ:˜ !˜˜ÝÔ"Ð#V¸TÐ#VÐ#VÐ#VÑWÔWÐWØ�Š6ˆ6Ø�5�5Ø�zŠz˜!˜QÑÔð 	Ø�5�5Ø�ˆ:ˆ:˜˜e˜˜Ø�5�5Ø�Š�TÑÔÐØ�	Š	�$‰ŒˆØ�	Š	�1�a�&ÑÔÐÐð ”ð ð ‰ˆˆ1Øˆqˆ6˜ÐÐà˜ˆ~ˆ~ !¨5 . .°Q¸!²V°VØ�u�uøØˆ4r   c                 óÒ  — t          |t          ¦  «        rt          |¦  «        }t          ¦   «         }|D ]“}t	          |¦  «        dk    rt          j        d|› �¦  «        ‚|\  }}|| vs|| vrt          j        d|› d�¦  «        ‚||k    r dS |                      ||¦  «        s dS ||v s||v r dS |                     |¦  «         Œ”t	          |¦  «        t	          | ¦  «        k    S )a  Return True if ``matching`` is a perfect matching for ``G``

    A *perfect matching* in a graph is a matching in which exactly one edge
    is incident upon each vertex.

    Parameters
    ----------
    G : NetworkX graph

    matching : dict or set
        A dictionary or set representing a matching. If a dictionary, it
        must have ``matching[u] == v`` and ``matching[v] == u`` for each
        edge ``(u, v)`` in the matching. If a set, it must have elements
        of the form ``(u, v)``, where ``(u, v)`` is an edge in the
        matching.

    Returns
    -------
    bool
        Whether the given set or dictionary represents a valid perfect
        matching in the graph.

    Examples
    --------
    >>> G = nx.Graph([(1, 2), (1, 3), (2, 3), (2, 4), (3, 5), (4, 5), (4, 6)])
    >>> my_match = {1: 2, 3: 5, 4: 6}
    >>> nx.is_perfect_matching(G, my_match)
    True

    r"   r#   r$   r%   Fr&   r   s         r   r   r   Ð   s  € õ@ �(�DÑ!Ô!ð 2Ý'¨Ñ1Ô1ˆå‰EŒE€EØð ð ˆÝˆt‰9Œ9˜Š>ˆ>ÝÔ"Ð#JÀDÐ#JÐ#JÑKÔKÐKØ‰ˆˆ1Ø�Aˆ:ˆ:˜ !˜˜ÝÔ"Ð#V¸TÐ#VÐ#VÐ#VÑWÔWÐWØ�Š6ˆ6Ø�5�5Ø�zŠz˜!˜QÑÔð 	Ø�5�5Ø�ˆ:ˆ:˜˜e˜˜Ø�5�5Ø�Š�TÑÔÐÐÝˆu‰:Œ:�˜Q™œÒÐr   Úweight)Ú
edge_attrsc                 óR  ‡— t          | j        ¦  «        dk    rt          | d|¬¦  «        S |                      |d¬¦  «        }dt          d„ |D ¦   «         ¦  «        z   Št	          j        ¦   «         }ˆfd„|D ¦   «         }|                     ||¬¦  «         t          |d|¬¦  «        S )	aå  Compute a minimum-weight maximum-cardinality matching of `G`.

    The minimum-weight maximum-cardinality matching is the matching
    that has the minimum weight among all maximum-cardinality matchings.

    Use the maximum-weight algorithm with edge weights subtracted
    from the maximum weight of all edges.

    A matching is a subset of edges in which no node occurs more than once.
    The weight of a matching is the sum of the weights of its edges.
    A maximal matching cannot add more edges and still be a matching.
    The cardinality of a matching is the number of matched edges.

    This method replaces the edge weights with 1 plus the maximum edge weight
    minus the original edge weight.

    new_weight = (max_weight + 1) - edge_weight

    then runs :func:`max_weight_matching` with the new weights.
    The max weight matching with these new weights corresponds
    to the min weight matching using the original weights.
    Adding 1 to the max edge weight keeps all edge weights positive
    and as integers if they started as integers.

    Read the documentation of `max_weight_matching` for more information.

    Parameters
    ----------
    G : NetworkX graph
      Undirected graph

    weight: string, optional (default='weight')
       Edge data key corresponding to the edge weight.
       If key not found, uses 1 as weight.

    Returns
    -------
    matching : set
        A minimal weight matching of the graph.

    See Also
    --------
    max_weight_matching
    r   T)Úmaxcardinalityr-   é   )ÚdataÚdefaultc              3   ó"   K  — | ]
\  }}}|V — Œd S ©N© )Ú.0Ú_Úws      r   ú	<genexpr>z&min_weight_matching.<locals>.<genexpr>7  s(   è è € Ð2Ð2™w˜q ! Q˜Ð2Ð2Ð2Ð2Ð2Ð2r   c              3   ó0   •K  — | ]\  }}}||‰|z
  fV — Œd S r5   r6   )r7   r   r   r9   Ú
max_weights       €r   r:   z&min_weight_matching.<locals>.<genexpr>9  s4   øè è € Ð;Ð;©¨¨1¨aˆa��J ‘NÐ#Ð;Ð;Ð;Ð;Ð;Ð;r   ©r-   )r)   r   r	   Úmaxr   ÚGraphÚadd_weighted_edges_from)r   r-   ÚG_edgesÚInvGr   r<   s        @r   r
   r
     s¶   ø€ õ` ˆ1Œ7�|„|�qÒÐÝ" 1°TÀ&ÐIÑIÔIÐIØ�gŠg˜6¨1ˆgÑ-Ô-€GØ•SÐ2Ð2¨'Ð2Ñ2Ô2Ñ2Ô2Ñ2€JÝŒ8‰:Œ:€DØ;Ð;Ð;Ð;°7Ð;Ñ;Ô;€EØ× Ò  ¨vÐ Ñ6Ô6Ð6Ý˜t°DÀÐHÑHÔHÐHr   Fc                 óJ  ‡ ‡‡‡‡‡‡‡‡‡ ‡!‡"‡#‡$‡%‡&‡'‡(‡)‡*—  G d„ d¦  «        Š G ˆfd„d¦  «        Št          ‰ ¦  «        Š$‰$st          ¦   «         S d}d}‰                      d¬¦  «        D ]c\  }}}|                     ‰d¦  «        }||k    r||k    r|}|o6t	          t          |¦  «        ¦  «                             d	¦  «        d         d
v }Œdi Š(i Š&i Š't          t          ‰$‰$¦  «        ¦  «        Š%t          t          ‰$t          d¦  «        ¦  «        ¦  «        Š"t          t          ‰$‰$¦  «        ¦  «        Š i Št          t          ‰$t          |¦  «        ¦  «        ¦  «        Š#i Š!i Šg Š)ˆ ˆ#ˆfd„Š*ˆˆˆˆ ˆ%ˆ&ˆ'ˆ(ˆ)f	d„Šˆˆ ˆ%ˆ&ˆ'ˆ(fd„}	ˆˆ ˆˆ ˆ!ˆ"ˆ%ˆ&ˆ'ˆ(ˆ)ˆ*fd„}
ˆˆˆˆˆ ˆ!ˆ"ˆ%ˆ&ˆ'ˆ(fd„}ˆˆ ˆ"ˆ(fd„Šˆˆˆ ˆ%ˆ&ˆ'ˆ(fd„}ˆ ˆ!ˆ"ˆ#ˆ$ˆ(ˆˆfd„}	 ‰& 
                    ¦   «          ‰' 
                    ¦   «          ‰ 
                    ¦   «          ‰!D ]	}d|_        Œ
‰ 
                    ¦   «          g ‰)dd…<   ‰$D ].}|‰(vr(‰&                     ‰%|         ¦  «        € ‰|dd¦  «         Œ/d}	 ‰)�r´|�s±‰)                     ¦   «         }‰&‰%|                  dk    sJ ‚‰                      |¦  «        D �]m}||k    rŒ
‰%|         }‰%|         }||k    rŒ!||f‰vr  ‰*||¦  «        }|dk    rdx‰||f<   ‰||f<   ||f‰v rš‰&                     |¦  «        € ‰|d|¦  «         Œp‰&                     |¦  «        dk    r. |	||¦  «        }|‰ur |
|||¦  «         Œ§ |||¦  «         d} n¸‰&                     |¦  «        €‰&|         dk    sJ ‚d‰&|<   ||f‰'|<   Œç‰&                     |¦  «        dk    r-‰                     |¦  «        �| ‰*‰|         Ž k     r||f‰|<   �Œ-‰&                     |¦  «        €+‰                     |¦  «        �| ‰*‰|         Ž k     r||f‰|<   �Œo‰)r|�¯±|r�nñd}dx}x}}‰s#d}t          ‰#                     ¦   «         ¦  «        }‰                      ¦   «         D ]U}‰&                     ‰%|         ¦  «        €8‰                     |¦  «        �# ‰*‰|         Ž }|dk    s||k     r|}d}‰|         }ŒV‰"D ]s}‰"|         €i‰&                     |¦  «        dk    rP‰                     |¦  «        �; ‰*‰|         Ž }|r|dz  dk    sJ ‚|dz  }n|dz  }|dk    s||k     r|}d}‰|         }Œt‰!D ]A}‰"|         €7‰&                     |¦  «        dk    r|dk    s‰!|         |k     r‰!|         }d}|}ŒB|dk    r5‰sJ ‚d}t#          dt          ‰#                     ¦   «         ¦  «        ¦  «        }‰$D ]a}‰&                     ‰%|         ¦  «        dk    r‰#|xx         |z  cc<   Œ2‰&                     ‰%|         ¦  «        dk    r‰#|xx         |z  cc<   Œb‰!D ]]}‰"|         €S‰&                     |¦  «        dk    r‰!|xx         |z  cc<   Œ4‰&                     |¦  «        dk    r‰!|xx         |z  cc<   Œ^|dk    rnš|dk    r=|\  }}‰&‰%|                  dk    sJ ‚dx‰||f<   ‰||f<   ‰)                     |¦  «         nU|dk    r=|\  }}dx‰||f<   ‰||f<   ‰&‰%|                  dk    sJ ‚‰)                     |¦  «         n|dk    r ||d¦  «         �Œ¬‰(D ]}‰(‰(|                  |k    sJ ‚Œ|sndt          ‰!                     ¦   «         ¦  «        D ]@}|‰!vrŒ‰"|         €1‰&                     |¦  «        dk    r‰!|         dk    r ||d¦  «         ŒA�ŒÃ|r
 |¦   «          t)          ‰(¦  «        S )a¶  Compute a maximum-weighted matching of G.

    A matching is a subset of edges in which no node occurs more than once.
    The weight of a matching is the sum of the weights of its edges.
    A maximal matching cannot add more edges and still be a matching.
    The cardinality of a matching is the number of matched edges.

    Parameters
    ----------
    G : NetworkX graph
      Undirected graph

    maxcardinality: bool, optional (default=False)
       If maxcardinality is True, compute the maximum-cardinality matching
       with maximum weight among all maximum-cardinality matchings.

    weight: string, optional (default='weight')
       Edge data key corresponding to the edge weight.
       If key not found, uses 1 as weight.


    Returns
    -------
    matching : set
        A maximal matching of the graph.

     Examples
    --------
    >>> G = nx.Graph()
    >>> edges = [(1, 2, 6), (1, 3, 2), (2, 3, 1), (2, 4, 7), (3, 5, 9), (4, 5, 3)]
    >>> G.add_weighted_edges_from(edges)
    >>> sorted(nx.max_weight_matching(G))
    [(2, 4), (5, 3)]

    Notes
    -----
    If G has edges with weight attributes the edge data are used as
    weight values else the weights are assumed to be 1.

    This function takes time O(number_of_nodes ** 3).

    If all edge weights are integers, the algorithm uses only integer
    computations.  If floating point weights are used, the algorithm
    could return a slightly suboptimal matching due to numeric
    precision errors.

    This method is based on the "blossom" method for finding augmenting
    paths and the "primal-dual" method for finding a matching of maximum
    weight, both methods invented by Jack Edmonds [1]_.

    Bipartite graphs can also be matched using the functions present in
    :mod:`networkx.algorithms.bipartite.matching`.

    References
    ----------
    .. [1] "Efficient Algorithms for Finding Maximum Matching in Graphs",
       Zvi Galil, ACM Computing Surveys, 1986.
    c                   ó   — e Zd ZdZdS )ú#max_weight_matching.<locals>.NoNodez-Dummy value which is different from any node.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   r   r   ÚNoNoderE   Š  s   € € € € € Ø;Ð;Ð;Ð;r   rJ   c                   ó&   •— e Zd ZdZg d¢Zˆ fd„ZdS )ú$max_weight_matching.<locals>.Blossomz7Representation of a non-trivial blossom or sub-blossom.)Úchildsr   Úmybestedgesc              3   ó°   •K  — g | j         ¢}|rG|                     ¦   «         }t          |‰¦  «        r|                     |j         ¦  «         n|V — |°Ed S d S r5   )rM   Úpopr'   Úextend)ÚselfÚstackÚtÚBlossoms      €r   Úleavesz+max_weight_matching.<locals>.Blossom.leavesŸ  sw   øè è € Ø"�d”k�NˆEØð Ø—I’I‘K”K�Ý˜a Ñ)Ô)ð Ø—L’L ¤Ñ*Ô*Ð*Ð*à�G�G�Gð ð ð ð ð ð r   N)rF   rG   rH   rI   Ú	__slots__rV   )rU   s   €r   rU   rL   �  s?   ø€ € € € € ØEÐEà6Ð6Ð6ˆ	ð	ð 	ð 	ð 	ð 	ð 	ð 	r   rU   r   T©r2   r1   ú')ÚintÚlongNc                 ór   •— ‰|          ‰|         z   d‰|          |                               ‰d¦  «        z  z
  S )Nr"   r1   )Úget)r   r9   r   Údualvarr-   s     €€€r   Úslackz"max_weight_matching.<locals>.slackü  s6   ø€ Ø�qŒz˜G AœJÑ&¨¨Q¨q¬T°!¬W¯[ª[¸ÀÑ-CÔ-CÑ)CÑCÐCr   c                 ó¼  •	— ‰	|          }‰
                      | ¦  «        €‰
                      |¦  «        �J ‚|x‰
| <   ‰
|<   |�|| fx‰| <   ‰|<   n
d x‰| <   ‰|<   d x‰| <   ‰|<   |dk    rPt          |‰¦  «        r)‰                     |                     ¦   «         ¦  «         d S ‰                     |¦  «         d S |dk    r‰|         } ‰‰|         d|¦  «         d S d S )Nr1   r"   )r]   r'   rQ   rV   Úappend)r9   rT   r   ÚbÚbaserU   ÚassignLabelÚbestedgeÚblossombaseÚ	inblossomÚlabelÚ	labeledgeÚmateÚqueues        €€€€€€€€€r   rd   z(max_weight_matching.<locals>.assignLabel  s  ø€ Ø�aŒLˆØ�yŠy˜‰|Œ|Ð#¨¯	ª	°!©¬Ð(<Ð(<Ð<ØÐˆˆa‰�5˜‘8Øˆ=Ø+,¨a¨&Ð0ˆI�a‰L˜9 Q™<˜<à*.Ð.ˆI�a‰L˜9 Q™<Ø$(Ð(ˆ�‰�h˜q‘kØ�Š6ˆ6å˜!˜WÑ%Ô%ð  Ø—’˜QŸXšX™ZœZÑ(Ô(Ð(Ð(Ð(à—’˜Q‘”���Ø�!ŠVˆVð ˜q”>ˆDØˆK˜˜Tœ
 A tÑ,Ô,Ð,Ð,Ð,ð ˆVr   c                 óž  •— g }‰}| ‰ur¹‰|          }‰|         dz  r	‰|         }n�‰|         dk    sJ ‚|                      |¦  «         d‰|<   ‰	|         €‰|         ‰
vsJ ‚‰} nR‰	|         d         ‰
‰|                  k    sJ ‚‰	|         d         } ‰|          }‰|         dk    sJ ‚‰	|         d         } |‰ur|| }} | ‰u°¹|D ]}d‰|<   Œ|S )Né   r1   é   r   r"   )ra   )r   r9   Úpathrc   rb   rJ   rf   rg   rh   ri   rj   s        €€€€€€r   ÚscanBlossomz(max_weight_matching.<locals>.scanBlossom  s  ø€ àˆØˆØ�vˆoˆoà˜!”ˆAØ�QŒx˜!‰|ð Ø" 1”~�ØØ˜”8˜q’=�=�=�=Ø�KŠK˜‰NŒNˆNØˆE�!‰Hà˜Œ|Ð#à" 1”~¨TÐ1Ð1Ð1Ð1Ø��à  ”| A”¨$¨{¸1¬~Ô*>Ò>Ð>Ð>Ð>Ø˜a”L ”O�Ø˜a”L�Ø˜Q”x 1’}�}�}�}à˜a”L ”O�à˜ˆˆØ˜!�1�ð/ �vˆoˆoð2 ð 	ð 	ˆAØˆE�!‰HˆHàˆr   c                 óˆ  •‡— ‰|          }‰|         Š‰|         } ‰¦   «         }| ‰|<   d ‰|<   |‰|<   g x|_         }||fgx|_        }‰|k    r‰|‰‰<   |                     ‰¦  «         |                     ‰‰         ¦  «         ‰‰         dk    s,‰‰         dk    r‰‰         d         ‰‰‰                  k    sJ ‚‰‰         d         }‰|         Š‰|k    °‰|                     |¦  «         |                     ¦   «          |                     ¦   «          ||k    r�|‰|<   |                     |¦  «         |                     ‰|         d         ‰|         d         f¦  «         ‰|         dk    s,‰|         dk    r‰|         d         ‰‰|                  k    sJ ‚‰|         d         }‰|         }||k    °�‰|         dk    sJ ‚d‰|<   ‰|         ‰|<   d‰|<   |                     ¦   «         D ].}‰‰|                  dk    r‰                     |¦  «         |‰|<   Œ/i }|D ]ÒŠt          ‰‰¦  «        r7‰j        �‰j        }	d ‰_        nBˆfd„‰                     ¦   «         D ¦   «         }	n!ˆfd„‰                     ‰¦  «        D ¦   «         }	|	D ]`}
|
\  }}‰|         |k    r||}}‰|         }||k    r;‰                     |¦  «        dk    r"||vs ‰||¦  «         ‰||         Ž k     r|
||<   Œad ‰‰<   ŒÓt          | 
                    ¦   «         ¦  «        |_        d }d ‰|<   |j        D ]}
 ‰|
Ž }|�||k     r|
}|}Œ|‰|<   d S )Nr"   r1   r   c                 óT   •— g | ]$}‰                      |¦  «        D ]}||k    ¯||f‘ŒŒ%S r6   )Ú	neighbors)r7   r   r9   r   s      €r   ú
<listcomp>z;max_weight_matching.<locals>.addBlossom.<locals>.<listcomp>€  sE   ø€ ð ð ð Ø#$¸Q¿[º[È¹^¼^ðð Ø89ÈqÐTUÊvÈv˜˜A˜ÈvÈvÈvÈvr   c                 ó$   •— g | ]}‰|k    ¯‰|f‘ŒS r6   r6   )r7   r9   Úbvs     €r   rt   z;max_weight_matching.<locals>.addBlossom.<locals>.<listcomp>„  s"   ø€ ÐFÐFÐF a¸bÀAºg¸g˜2˜q˜'¸g¸g¸gr   )rM   r   ra   ÚreverserV   r'   rN   rs   r]   ÚlistÚvalues)rc   r   r9   ÚbbÚbwrb   ro   ÚedgsÚ
bestedgetoÚnblistÚkÚiÚjÚbjÚ
mybestedgeÚkslackÚmybestslackrv   rU   r   re   rf   ÚblossomdualÚblossomparentrg   rh   ri   rj   rk   r_   s                    @€€€€€€€€€€€€r   Ú
addBlossomz'max_weight_matching.<locals>.addBlossom?  së  øø€ Ø�tŒ_ˆØ�qŒ\ˆØ�qŒ\ˆàˆG‰IŒIˆØˆ�A‰Øˆ�aÑØˆ�bÑàÐˆŒ�4Ø˜a˜&˜Ð!ˆŒ�$à�BŠhˆhà !ˆM˜"ÑØ�KŠK˜‰OŒOˆOØ�KŠK˜	 "œÑ&Ô&Ð&Ø˜”9 ’>�>Ø�b”	˜Q’� 9¨R¤=°Ô#3°t¸KÈ¼OÔ7LÒ#LÐ#LÐ#Lðð ˜"”˜aÔ ˆAØ˜1”ˆBð �BŠhˆhð 	�Š�B‰ŒˆØ�Š‰ŒˆØ�Š‰Œˆà�BŠhˆhà !ˆM˜"ÑØ�KŠK˜‰OŒOˆOØ�KŠK˜ 2œ qÔ)¨9°R¬=¸Ô+;Ð<Ñ=Ô=Ð=Ø˜”9 ’>�>Ø�b”	˜Q’� 9¨R¤=°Ô#3°t¸KÈ¼OÔ7LÒ#LÐ#LÐ#Lðð ˜"”˜aÔ ˆAØ˜1”ˆBð �BŠhˆhð �RŒy˜AŠ~ˆ~ˆ~ˆ~Øˆˆa‰Ø  ”}ˆ	�!‰àˆ�A‰à—’‘”ð 	ð 	ˆAØ�Y˜q”\Ô" aÒ'Ð'ð —’˜Q‘”�ØˆI�a‰LˆLàˆ
Øð 	 ð 	 ˆBÝ˜"˜gÑ&Ô&ð GØ”>Ð-àœ^�Fà%)�B”N�Nðð ð ð Ø(*¯	ª	©¬ðñ ô �F�Fð GÐFÐFÐF¨1¯;ª;°r©?¬?ÐFÑFÔF�Øð 
'ð 
'�Ø‘��AØ˜Q”< 1Ò$Ð$Ø˜a�q�AØ˜q”\�à˜!’G�GØŸ	š	 "™œ¨Ò*Ð*Ø JÐ.Ð.°5°5¸¸A±;´;ÀÀÈ
ÐSUÌÐAWÒ3WÐ3Wà%&�J˜r‘NøàˆH�R‰LˆLÝ˜Z×.Ò.Ñ0Ô0Ñ1Ô1ˆŒàˆ
Øˆ�‰Ø”ð 	%ð 	%ˆAØ�U˜A�YˆFØÐ! V¨kÒ%9Ð%9Ø�
Ø$�øØ ˆ�‰ˆˆr   c                 óÎ   •— ˆˆˆˆ	ˆ
ˆˆˆˆˆˆfd„} || |¦  «        g}|rE|d         }|D ]"}|                       |||¦  «        ¦  «          n|                     ¦   «          |°Cd S d S )Nc              3   ó´  •K  — | j         D ]L}d ‰|<   t          |‰¦  «        r0|r‰|         dk    r|V — Œ*|                     ¦   «         D ]}|‰|<   ŒŒG|‰|<   ŒM|�s2‰                     | ¦  «        dk    �r‰‰|          d                  }| j                              |¦  «        }|dz  r|t          | j         ¦  «        z  }d}nd}‰|          \  }}|dk    r—|dk    r| j        |         \  }}	n| j        |dz
           \  }	}d ‰|<   d ‰|	<    ‰|d|¦  «         dx‰||	f<   ‰|	|f<   ||z  }|dk    r| j        |         \  }}n| j        |dz
           \  }}dx‰||f<   ‰||f<   ||z  }|dk    °—| j         |         }
dx‰|<   ‰|
<   ||fx‰|<   ‰|
<   d ‰|
<   ||z  }| j         |         |k    rã| j         |         }‰                     |¦  «        dk    r||z  }Œ=t          |‰¦  «        r/|                     ¦   «         D ]}‰                     |¦  «        r nŒn|}‰                     |¦  «        rK‰|         dk    sJ ‚‰|         |k    sJ ‚d ‰|<   d ‰‰‰|                  <    ‰|d‰|         d         ¦  «         ||z  }| j         |         |k    °ã‰                     | d ¦  «         ‰                     | d ¦  «         ‰                     | d ¦  «         ‰| = ‰| = ‰| = d S )Nr   r"   r1   éÿÿÿÿT)rM   r'   rV   r]   Úindexr)   r   rP   )rb   ÚendstageÚsr   Ú
entrychildr�   Újstepr9   ÚpÚqr{   rv   rU   Ú	allowedgerd   re   rf   r†   r‡   rg   rh   ri   rj   s               €€€€€€€€€€€r   Ú_recursez<max_weight_matching.<locals>.expandBlossom.<locals>._recurse¤  s¡  øè è € à”Xð 
%ð 
%�Ø#'�˜aÑ Ý˜a Ñ)Ô)ð %Øð - K°¤N°aÒ$7Ð$7à˜˜˜˜à!"§¢¡¤ð -ð -˜AØ+,˜I a™L˜Lð-ð $%�I˜a‘L�Lð ñ E %§)¢)¨A¡,¤,°!Ò"3Ñ"3ð ' y°¤|°A¤Ô7�
à”H—N’N :Ñ.Ô.�Ø�q‘5ð à�˜QœX™œÑ&�AØ�E�Eð �Eà  ”|‘��1Ø˜1’f�fà ’z�zØ œw qœz™˜˜1˜1à œw q¨1¡uœ~™˜˜1Ø#�E˜!‘HØ#�E˜!‘HØ�K  1 aÑ(Ô(Ð(à<@Ð@�I˜q !˜fÑ%¨	°1°a°&Ñ(9Ø˜‘J�AØ ’z�zØ œw qœz™˜˜1˜1à œw q¨1¡uœ~™˜˜1à<@Ð@�I˜q !˜fÑ%¨	°1°a°&Ñ(9Ø˜‘J�Að% ˜1’f�fð* ”X˜a”[�Ø'(Ð(��a‘˜5 ™9Ø01°1¨vÐ5�	˜!‘˜y¨™}Ø#�˜‘à�U‘
�Ø”h˜q”k ZÒ/Ð/ð œ !œ�BØ—y’y ‘}”}¨Ò)Ð)ð ˜U™
˜Ø Ý! " gÑ.Ô.ð Ø!#§¢¡¤ð &ð &˜AØ$Ÿyšy¨™|œ|ð &Ø % ð&øð ˜ð —y’y ‘|”|ð ;Ø$ Qœx¨1š}˜}˜}˜}Ø(¨œ|¨rÒ1Ð1Ð1Ð1Ø#'˜˜a™Ø7;˜˜d ;¨r¤?Ô3Ñ4Ø#˜ A q¨)°A¬,°q¬/Ñ:Ô:Ð:Ø˜‘J�Að1 ”h˜q”k ZÒ/Ð/ð4 �IŠI�a˜ÑÔÐØ�MŠM˜!˜TÑ"Ô"Ð"Ø�LŠL˜˜DÑ!Ô!Ð!Ø˜aÐ Ø˜A�Ø˜A���r   r‹   ©ra   rP   )rb   r�   r”   rS   ÚtoprŽ   rU   r“   rd   re   rf   r†   r‡   rg   rh   ri   rj   s         €€€€€€€€€€€r   ÚexpandBlossomz*max_weight_matching.<locals>.expandBlossomž  sâ   ø€ ð[	ð [	ð [	ð [	ð [	ð [	ð [	ð [	ð [	ð [	ð [	ð [	ð [	ð [	ð [	ðD �˜!˜XÑ&Ô&Ð'ˆØð 	Ø˜”)ˆCØð ð �Ø—’˜X˜X a¨Ñ2Ô2Ñ3Ô3Ð3Ø�à—	’	‘”�ð ð 	ð 	ð 	ð 	ð 	r   c                 ó²   •— ˆˆˆˆ	fd„} || |¦  «        g}|r>|d         }|D ]}|                       ||Ž ¦  «          n|                     ¦   «          |°<d S d S )Nc              3   óî  •K  — |}‰
|         | k    r‰
|         }‰
|         | k    °t          |‰¦  «        r||fV — | j                             |¦  «        x}}|dz  r|t          | j        ¦  «        z  }d}nd}|dk    rŠ||z  }| j        |         }|dk    r| j        |         \  }}n| j        |dz
           \  }}t          |‰¦  «        r||fV — ||z  }| j        |         }t          |‰¦  «        r||fV — |‰|<   |‰|<   |dk    °Š| j        |d …         | j        d |…         z   | _        | j        |d …         | j        d |…         z   | _        ‰	| j        d                  ‰	| <   ‰	|          |k    sJ ‚d S )Nr1   r‹   r   )r'   rM   rŒ   r)   r   )rb   r   rT   r€   r�   r�   r9   ÚxrU   rf   r‡   rj   s           €€€€r   r”   z=max_weight_matching.<locals>.augmentBlossom.<locals>._recurse  sÉ  øè è € ð ˆAØ Ô" aÒ'Ð'Ø! !Ô$�ð   Ô" aÒ'Ð'õ ˜!˜WÑ%Ô%ð Ø˜!�f���à”H—N’N 1Ñ%Ô%Ð%ˆA�Ø�1‰uð à•S˜œ‘]”]Ñ"�Ø��ð �à�q’&�&à�U‘
�Ø”H˜Q”K�Ø˜A’:�:Øœ7 1œ:‘D�A�q�qàœ7 1 q¡5œ>‘D�A�qÝ˜a Ñ)Ô)ð !Ø˜a˜&�L�L�Là�U‘
�Ø”H˜Q”K�Ý˜a Ñ)Ô)ð !Ø˜a˜&�L�L�Là��Q‘Ø��Q‘ð# �q’&�&ð& ”x   ”| a¤h¨r°¨r¤lÑ2ˆAŒHØ”g˜a˜b˜b”k A¤G¨B¨Q¨B¤KÑ/ˆAŒGØ(¨¬°!¬Ô5ˆK˜‰NØ˜q”> QÒ&Ð&Ð&Ð&Ð&Ð&r   r‹   r•   )
rb   r   r”   rS   r–   ÚargsrU   rf   r‡   rj   s
         €€€€r   ÚaugmentBlossomz+max_weight_matching.<locals>.augmentBlossom  s¨   ø€ ð)	'ð )	'ð )	'ð )	'ð )	'ð )	'ð )	'ð )	'ð` �˜!˜Q‘”Ð ˆØð 	Ø˜”)ˆCØð ð �Ø—’˜X˜X t˜_Ñ-Ô-Ð-Ø�à—	’	‘”�ð ð 	ð 	ð 	ð 	ð 	r   c                 óÈ  •— | |f|| ffD ]×\  }}	 ‰
|         }‰|         dk    sJ ‚‰|         €
‰	|         ‰vs ‰|         d         ‰‰	|                  k    sJ ‚t          |‰¦  «        r ‰||¦  «         |‰|<   ‰|         €n_‰|         d         }‰
|         }‰|         dk    sJ ‚‰|         \  }}‰	|         |k    sJ ‚t          |‰¦  «        r ‰||¦  «         |‰|<   ŒÑŒØd S )Nr1   r   r"   )r'   )r   r9   rŽ   r�   ÚbsrT   ÚbtrU   rœ   rf   rg   rh   ri   rj   s          €€€€€€€r   ÚaugmentMatchingz,max_weight_matching.<locals>.augmentMatchingS  sF  ø€ Ø˜�V˜a ˜VÐ$ð 	ð 	‰DˆAˆqðØ˜q”\�Ø˜R”y A’~�~�~�~Ø! "œÐ-°+¸b´/ÈÐ2MÐ2MØ˜b”M !Ô$¨¨[¸¬_Ô(=Ò=Ð=Ð=ðõ ˜b 'Ñ*Ô*ð *Ø"�N 2 qÑ)Ô)Ð)à��Q‘à˜R”=Ð(àØ˜b”M !Ô$�Ø˜q”\�Ø˜R”y A’~�~�~�~à  ”}‘��1à" 2”¨!Ò+Ð+Ð+Ð+Ý˜b 'Ñ*Ô*ð *Ø"�N 2 qÑ)Ô)Ð)à��Q‘ð3ð ð%	ð 	r   c                  ó0  •— ‰r1t          dt          ‰                     ¦   «         ¦  «         ¦  «        } nd} t          ‰                     ¦   «         ¦  «        | z   dk    sJ ‚t          ‰¦  «        dk    s't          ‰                     ¦   «         ¦  «        dk    sJ ‚‰                     d¬¦  «        D �]k\  }}}|                     ‰d¦  «        }||k    rŒ$‰|         ‰|         z   d|z  z
  }|g}|g}‰|d                  �/|                     ‰|d                  ¦  «         ‰|d                  ­/‰|d                  �/|                     ‰|d                  ¦  «         ‰|d                  ­/|                     ¦   «          |                     ¦   «          t          ||¦  «        D ]\  }}	||	k    r n|d‰|         z  z  }Œ|dk    sJ ‚‰                     |¦  «        |k    s‰                     |¦  «        |k    r"‰|         |k    r‰|         |k    sJ ‚|dk    sJ ‚�Œm‰D ]}
|
‰v s‰|
         | z   dk    sJ ‚Œ‰D ][}‰|         dk    rMt          |j        ¦  «        dz  dk    sJ ‚|j        dd d…         D ]\  }}‰|         |k    r‰|         |k    sJ ‚Œ Œ\d S )Nr   TrX   r1   r"   r‹   )	r>   Úminry   r)   r   r]   ra   rw   Úzip)Úvdualoffsetr€   r�   ÚdÚwtrŽ   Ú	iblossomsÚ	jblossomsÚbir‚   r   rb   r   r†   r‡   r^   Úgnodesrj   r0   r-   s               €€€€€€€€r   ÚverifyOptimumz*max_weight_matching.<locals>.verifyOptimumt  sþ  ø€ Øð 	õ ˜a¥# g§n¢nÑ&6Ô&6Ñ"7Ô"7Ð!7Ñ8Ô8ˆKˆKàˆKå�7—>’>Ñ#Ô#Ñ$Ô$ {Ñ2°aÒ7Ð7Ð7Ð7Ý�;ÑÔ 1Ò$Ð$­¨K×,>Ò,>Ñ,@Ô,@Ñ(AÔ(AÀQÒ(FÐ(FÐ(FÐFð —w’w D�wÑ)Ô)ð 	ñ 	‰GˆAˆq�!Ø—’�v˜qÑ!Ô!ˆBØ�AŠvˆvØØ˜”
˜W QœZÑ'¨!¨b©&Ñ0ˆAØ˜ˆIØ˜ˆIØ 	¨"¤Ô.Ð:Ø× Ò  ¨y¸¬}Ô!=Ñ>Ô>Ð>ð   	¨"¤Ô.Ð:à 	¨"¤Ô.Ð:Ø× Ò  ¨y¸¬}Ô!=Ñ>Ô>Ð>ð   	¨"¤Ô.Ð:à×ÒÑÔÐØ×ÒÑÔÐÝ˜i¨Ñ3Ô3ð )ð )‘��BØ˜’8�8Ø�EØ�Q˜ RœÑ(Ñ(��Ø˜’6�6�6�6Ø�xŠx˜‰{Œ{˜aÒÐ 4§8¢8¨A¡;¤;°!Ò#3Ð#3Ø˜A”w !’|�|¨¨Q¬°1ª¨¨Ð4Ø˜A’v�v�v�vùàð 	@ð 	@ˆAØ˜�I�I '¨!¤*¨{Ñ":¸aÒ"?Ð"?Ð"?Ð?øàð 	9ð 	9ˆAØ˜1Œ~ Ò!Ð!Ý˜1œ7‘|”| aÑ'¨1Ò,Ð,Ð,Ð,ØœG A D q DœMð 9ð 9‘D�A�qØ œ7 aš<˜<¨D°¬G°qªL¨L¨LÐ8¨Løð		9ð 	9r   r"   r‹   g       @é   rm   F)rx   r   r   r]   ÚstrÚtypeÚsplitr(   r£   r   ÚclearrN   rP   rs   r¢   ry   r   r>   ra   Úkeysr    )+r   r0   r-   Ú	maxweightÚ
allintegerr€   r�   r¥   r¦   rp   rˆ   r—   r    r«   rb   r   Ú	augmentedr9   rv   r{   r„   rc   Ú	deltatypeÚdeltaÚ	deltaedgeÚdeltablossomrU   rJ   r“   rd   rœ   re   rf   r†   r‡   r^   rª   rg   rh   ri   rj   rk   r_   s+   ```                       @@@@@@@@@@@@@@@@@r   r	   r	   >  sV  øøøøøøøøøøøøøøøøøøøø€ ðX<ð <ð <ð <ð <ñ <ô <ð <ðð ð ð ð ð ð ñ ô ð õ8 �!‰WŒW€FØð Ý‰uŒuˆð €IØ€JØ—7’7 �7Ñ%Ô%ð Uð U‰ˆˆ1ˆaØ�UŠU�6˜1ÑÔˆØ�Š6ˆ6�b˜9’n�nØˆIØÐT¥S­¨b©¬¡]¤]×%8Ò%8¸Ñ%=Ô%=¸aÔ%@ÀOÐ%Sˆ
ˆ
ð
 €Dð €Eð €Iõ •S˜ Ñ(Ô(Ñ)Ô)€Iõ
 �˜V¥V¨D¡\¤\Ñ2Ô2Ñ3Ô3€Mõ •s˜6 6Ñ*Ô*Ñ+Ô+€Kð €Hõ •3�v�v iÑ0Ô0Ñ1Ô1Ñ2Ô2€Gð
 €Kð
 €Ið €EðDð Dð Dð Dð Dð Dð Dð
-ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð2 ð  ð  ð  ð  ð  ð  ð  ð  ð  ðJ\!ð \!ð \!ð \!ð \!ð \!ð \!ð \!ð \!ð \!ð \!ð \!ð \!ð \!ð \!ð \!ð~oð oð oð oð oð oð oð oð oð oð oð oð oð oð oðh=ð =ð =ð =ð =ð =ð =ð =ðBð ð ð ð ð ð ð ð ð ð ðB)9ð )9ð )9ð )9ð )9ð )9ð )9ð )9ð )9ð )9ð )9ð )9ðZU'ð 	�Š‰ŒˆØ�ŠÑÔÐð 	�ŠÑÔÐØð 	!ð 	!ˆAØ ˆAŒMˆMð 	�ŠÑÔÐð ˆˆaˆaˆa‰ð ð 	(ð 	(ˆAØ˜�� 5§9¢9¨Y°q¬\Ñ#:Ô#:Ð#BØ�˜A˜q $Ñ'Ô'Ð'øð ˆ	ðh	3ð ñ :1 	ñ :1à—I’I‘K”K�Ø˜Y qœ\Ô*¨aÒ/Ð/Ð/Ð/ð Ÿš Q™œð 41ñ 41�AØ˜A’v�vØ à" 1œ�BØ" 1œ�BØ˜R’x�xà Ø˜1�v YÐ.Ð.Ø!&  q¨!¡¤˜Ø! Qš;˜;àDHÐH˜I q¨! fÑ-°	¸1¸a¸&Ñ0AØ˜1�v Ð*Ð*Ø Ÿ9š9 R™=œ=Ð0ð (˜K¨¨1¨aÑ0Ô0Ð0Ð0Ø"ŸYšY r™]œ]¨aÒ/Ð/ð $/ ;¨q°!Ñ#4Ô#4˜DØ#¨6Ð1Ð1ð !+ 
¨4°°AÑ 6Ô 6Ð 6Ð 6ð !0 °°1Ñ 5Ô 5Ð 5Ø,- 	Ø % Ø"ŸYšY q™\œ\Ð1ð
 $)¨¤9°¢> > > >Ø'(˜E !™HØ,-¨q¨6˜I a™LøØŸš 2™œ¨!Ò+Ð+ð $Ÿ<š<¨Ñ+Ô+Ð3°vÀÀÀxÐPRÄ|Ð@TÒ7TÐ7TØ,-¨q¨6˜H R™LùØŸš 1™œÐ-ð $Ÿ<š<¨™?œ?Ð2°f¸u¸uÀhÈqÄkÐ?RÒ6RÐ6RØ+,¨a¨&˜H Q™Kùðu ð :1 	ñ :1ðx ð Ùð ˆIØ/3Ð3ˆEÐ3�I ð "ð .Ø�	Ý˜GŸNšNÑ,Ô,Ñ-Ô-�ð —W’W‘Y”Yð 0ð 0�Ø—9’9˜Y qœ\Ñ*Ô*Ð2°x·|²|ÀA±´Ð7RØ˜˜x¨œ{Ð+�AØ  B’�¨!¨eª)¨)Ø !˜Ø$%˜	Ø$,¨Q¤K˜	øð #ð 0ð 0�à! !Ô$Ð,ØŸ	š	 !™œ¨Ò)Ð)Ø Ÿš Q™œÐ3à"˜U H¨Q¤KÐ0�FØ!ð )Ø &¨¡
¨qÒ0Ð0Ð0Ð0Ø" a™K˜˜à" S™L˜Ø  B’�¨!¨eª)¨)Ø !˜Ø$%˜	Ø$,¨Q¤K˜	øð !ð %ð %�à! !Ô$Ð,ØŸ	š	 !™œ¨Ò)Ð)Ø" bš˜¨K¸¬N¸UÒ,BÐ,Bà'¨œN�EØ !�IØ#$�Løà˜BŠˆð &Ð%Ð%�~Ø�	Ý˜A�s 7§>¢>Ñ#3Ô#3Ñ4Ô4Ñ5Ô5�ð ð (ð (�Ø—9’9˜Y qœ\Ñ*Ô*¨aÒ/Ð/à˜A�J�J”J %Ñ'�J�J‘J�JØ—Y’Y˜y¨œ|Ñ,Ô,°Ò1Ð1à˜A�J�J”J %Ñ'�J�J‘JøØ ð 0ð 0�Ø  Ô#Ð+Ø—y’y ‘|”| qÒ(Ð(à# A˜˜œ¨%Ñ/˜˜™˜ØŸš 1™œ¨Ò*Ð*à# A˜˜œ¨%Ñ/˜˜™øð ˜AŠ~ˆ~àØ˜a’�à"‘��AØ˜Y qœ\Ô*¨aÒ/Ð/Ð/Ð/Ø8<Ð<�	˜1˜a˜&Ñ! I¨q°!¨fÑ$5Ø—’˜Q‘”��Ø˜a’�à"‘��AØ8<Ð<�	˜1˜a˜&Ñ! I¨q°!¨fÑ$5Ø˜Y qœ\Ô*¨aÒ/Ð/Ð/Ð/Ø—’˜Q‘”��Ø˜a’�à�˜l¨EÑ2Ô2Ð2ñQh	3ðZ ð 	&ð 	&ˆAØ˜˜Qœ”= AÒ%Ð%Ð%Ð%Ð%ð ð 	Øõ �k×&Ò&Ñ(Ô(Ñ)Ô)ð 	'ð 	'ˆAØ˜Ð#Ð#ØØ˜QÔÐ'¨E¯IªI°a©L¬L¸AÒ,=Ð,=À+ÈaÄ.ÐTUÒBUÐBUØ�˜a Ñ&Ô&Ð&øñkU'ðp ð Øˆ‰Œˆå Ñ%Ô%Ð%r   r=   )Fr-   )rI   Ú	itertoolsr   r   Únetworkxr   Únetworkx.utilsr   Ú__all__Ú_dispatchabler   r    r   r   r   r
   r	   r6   r   r   ú<module>r¾      sÜ  ðØ AÐ Aà *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .ðð ð €ð Ð�\Ñ"Ô"ØÐ�ZÑ Ô ØÔð$ð $ñ Ôñ !Ô ñ #Ô"ð$ðNð ð ð2 Ôð9ð 9ñ Ôð9ðx Ôð:ð :ñ Ôð:ðz Ôð0 ð 0 ñ Ôð0 ðf Ð�\Ñ"Ô"ØÐ�ZÑ Ô Ø€Ô˜XÐ&Ñ&Ô&ð4Ið 4Ið 4Iñ 'Ô&ñ !Ô ñ #Ô"ð4Iðn Ð�\Ñ"Ô"ØÐ�ZÑ Ô Ø€Ô˜XÐ&Ñ&Ô&ð{&ð {&ð {&ñ 'Ô&ñ !Ô ñ #Ô"ð{&ð {&ð {&r   