
"""simple docstring"""

from __future__ import annotations

from queue import Queue




def 			lowercase__  (    lowerCAmelCase :    int       , lowerCAmelCase :    int       )       ->					tuple[int, int]:






    """simple docstring"""




    a ^= b
    b ^= a
    a ^= b
    return a, b




def 			lowercase__  (    lowerCAmelCase :    int       , lowerCAmelCase :    list[list[int]]       )       ->					list[list[int]]:






    """simple docstring"""




    UpperCAmelCase  	=    1
    while (1 << j) < max_node:
        for i in range(1       , max_node + 1       ):
            UpperCAmelCase  	=    parent[j - 1][parent[j - 1][i]]
        j += 1
    return parent




def 			lowercase__  (    lowerCAmelCase :    int       , lowerCAmelCase :    int       , lowerCAmelCase :    list[int]       , lowerCAmelCase :    list[list[int]]       )       ->					int:






    """simple docstring"""




    if level[u] < level[v]:
        UpperCAmelCase	,							UpperCAmelCase  	=    swap(lowerCAmelCase       , lowerCAmelCase       )
    # making depth of u same as depth of v
    for i in range(18       , -1       , -1       ):
        if level[u] - (1 << i) >= level[v]:
            UpperCAmelCase  	=    parent[i][u]
    # at the same depth if u==v that mean lca is found
    if u == v:
        return u
    # moving both nodes upwards till lca in found
    for i in range(18       , -1       , -1       ):
        if parent[i][u] not in [0, parent[i][v]]:
            UpperCAmelCase	,							UpperCAmelCase  	=    parent[i][u], parent[i][v]
    # returning longest common ancestor of u,v
    return parent[0][u]




def 			lowercase__  (    lowerCAmelCase :    list[int]       , lowerCAmelCase :    list[list[int]]       , lowerCAmelCase :    int       , lowerCAmelCase :    dict[int, list[int]]       , lowerCAmelCase :    int = 1       , )       ->					tuple[list[int], list[list[int]]]:






    """simple docstring"""




    UpperCAmelCase  	=    0
    UpperCAmelCase  	=    Queue(maxsize=lowerCAmelCase       )
    q.put(lowerCAmelCase       )
    while q.qsize() != 0:
        UpperCAmelCase  	=    q.get()
        for v in graph[u]:
            if level[v] == -1:
                UpperCAmelCase  	=    level[u] + 1
                q.put(lowerCAmelCase       )
                UpperCAmelCase  	=    u
    return level, parent




def 			lowercase__  (    )       ->					None:






    """simple docstring"""




    UpperCAmelCase  	=    13
    # initializing with 0
    UpperCAmelCase  	=    [[0 for _ in range(max_node + 10       )] for _ in range(20       )]
    # initializing with -1 which means every node is unvisited
    UpperCAmelCase  	=    [-1 for _ in range(max_node + 10       )]
    UpperCAmelCase  	=    {
        1: [2, 3, 4],
        2: [5],
        3: [6, 7],
        4: [8],
        5: [9, 10],
        6: [11],
        7: [],
        8: [12, 13],
        9: [],
        10: [],
        11: [],
        12: [],
        13: [],
    }
    UpperCAmelCase	,							UpperCAmelCase  	=    breadth_first_search(lowerCAmelCase       , lowerCAmelCase       , lowerCAmelCase       , lowerCAmelCase       , 1       )
    UpperCAmelCase  	=    create_sparse(lowerCAmelCase       , lowerCAmelCase       )
    print('LCA of node 1 and 3 is: '       , lowest_common_ancestor(1       , 3       , lowerCAmelCase       , lowerCAmelCase       )       )
    print('LCA of node 5 and 6 is: '       , lowest_common_ancestor(5       , 6       , lowerCAmelCase       , lowerCAmelCase       )       )
    print('LCA of node 7 and 11 is: '       , lowest_common_ancestor(7       , 11       , lowerCAmelCase       , lowerCAmelCase       )       )
    print('LCA of node 6 and 7 is: '       , lowest_common_ancestor(6       , 7       , lowerCAmelCase       , lowerCAmelCase       )       )
    print('LCA of node 4 and 12 is: '       , lowest_common_ancestor(4       , 12       , lowerCAmelCase       , lowerCAmelCase       )       )
    print('LCA of node 8 and 8 is: '       , lowest_common_ancestor(8       , 8       , lowerCAmelCase       , lowerCAmelCase       )       )


if __name__ == "__main__":
   main()





"""simple docstring"""

from dataclasses import dataclass
from typing import List, Optional, Union

import numpy as np
import PIL
from PIL import Image

from ...utils import is_torch_available, is_transformers_available


if is_transformers_available() and is_torch_available():
   from .image_encoder import PaintByExampleImageEncoder
   from .pipeline_paint_by_example import PaintByExamplePipeline



