<p>There is an integer array <code>nums</code> that consists of <code>n</code> <strong>unique </strong>elements, but you have forgotten it. However, you do remember every pair of adjacent elements in <code>nums</code>.</p>

<p>You are given a 2D integer array <code>adjacentPairs</code> of size <code>n - 1</code> where each <code>adjacentPairs[i] = [u<sub>i</sub>, v<sub>i</sub>]</code> indicates that the elements <code>u<sub>i</sub></code> and <code>v<sub>i</sub></code> are adjacent in <code>nums</code>.</p>

<p>It is guaranteed that every adjacent pair of elements <code>nums[i]</code> and <code>nums[i+1]</code> will exist in <code>adjacentPairs</code>, either as <code>[nums[i], nums[i+1]]</code> or <code>[nums[i+1], nums[i]]</code>. The pairs can appear <strong>in any order</strong>.</p>

<p>Return <em>the original array </em><code>nums</code><em>. If there are multiple solutions, return <strong>any of them</strong></em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> adjacentPairs = [[2,1],[3,4],[3,2]]
<strong>Output:</strong> [1,2,3,4]
<strong>Explanation:</strong> This array has all its adjacent pairs in adjacentPairs.
Notice that adjacentPairs[i] may not be in left-to-right order.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> adjacentPairs = [[4,-2],[1,4],[-3,1]]
<strong>Output:</strong> [-2,4,1,-3]
<strong>Explanation:</strong> There can be negative numbers.
Another solution is [-3,1,4,-2], which would also be accepted.
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> adjacentPairs = [[100000,-100000]]
<strong>Output:</strong> [100000,-100000]
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>nums.length == n</code></li>
	<li><code>adjacentPairs.length == n - 1</code></li>
	<li><code>adjacentPairs[i].length == 2</code></li>
	<li><code>2 &lt;= n &lt;= 10<sup>5</sup></code></li>
	<li><code>-10<sup>5</sup> &lt;= nums[i], u<sub>i</sub>, v<sub>i</sub> &lt;= 10<sup>5</sup></code></li>
	<li>There exists some <code>nums</code> that has <code>adjacentPairs</code> as its pairs.</li>
</ul>

from collections import defaultdict, deque
class Solution:
    def restoreArray(self, adjacentPairs: List[List[int]]) -> List[int]:

        freq = {}

        for a,b in adjacentPairs:
            freq[a] = freq.get(a, 0) + 1
            freq[b] = freq.get(b, 0) + 1
        
        print(freq)
        for key in freq:
            if freq[key] == 1:
                start = key
                break
        
        print(start)
        adjList = defaultdict(list)
        # build adjacency list
        for a,b in adjacentPairs:
            adjList[a].append(b)
            adjList[b].append(a)
        print("adjList: ", adjList)

        mqueue = deque([start])
        visited = set()
        res = []
        print(mqueue)
        while mqueue:   # [2] 
            curr = mqueue.pop()  # 2
            res.append(curr)
            visited.add(curr)
            for el in adjList[curr]:
                if el not in visited:
                    mqueue.append(el)  # 2: 1, 3
        
        return res

       
        """
        2: 1, 3 
        1: 2 
        3: 4, 2
        4: 3


        Params
        ======

        nums : array of ints, n unique elements. But I forgot it. 
            - I remember: every pair of adjacent elements in nums

        adjacentPairs : 2d array, size n-1, 
        adjacentPairs[i] = [ui, vi] : indicates elements ui and vi are adjacent in nums.

        nums[i] and nums[i+1] exist in adjacentPairs 

        Return the original nums. Any of them. 

        Sol
        ===

        - adjacentPairs = [[2,1], [3,4], [3,2]]

    
           2: 1, 3 
           1: 2 ///
           3: 4, 2
           4: 3

        1. Find elements that occur only once
        1, 4

        arr = []
        for k, v in dictionary:
            if len(dictionary[k]) == 1:
                temp = k,v
            else:
                temp = v1, k, v2

        Follow adjacency list:
        arr = [1]
        while dictionary:
            arr.append(dict[k]) -> 1,2
            temp = k
            k = dict[k]
            del dict(temp)

        """


        

            


            






69965