<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>

class Solution {
public:
    vector<int> restoreArray(vector<vector<int>>& adjP) {
        unordered_map<int,vector<int>> mapping;
        for(auto& x:adjP){
            if(mapping.find(x[0]) != mapping.end()){
                mapping[x[0]][0]++;
                mapping[x[0]].push_back(x[1]);
            } else {
                mapping[x[0]] = vector<int>{1, x[1]};
            }
            if (mapping.find(x[1]) != mapping.end()){
                mapping[x[1]][0]++;
                mapping[x[1]].push_back(x[0]);
            } else {
                mapping[x[1]] = vector<int>{1, x[0]};
            }
        }
        
        int n = mapping.size();
        vector<int> ans(n, INT_MIN);
        
        for(auto& [k, v]:mapping){
            if(v[0] == 1){
                if(ans[0] == INT_MIN) ans[0] = k;
                else ans[n-1] = k;
                v[0] = -1;
            }
            //cout << k << " " << v[0] << endl;
        }
        
        for(int i = 1; i < n - 1; i++){
            int prev = ans[i - 1];
            int Ist = mapping[prev][1];
            int IInd = (mapping[prev].size() > 2) ? mapping[prev][2] : 0;
            
            if(i == 1 || mapping[Ist][0] > 0){
                ans[i] = Ist;
                mapping[Ist][0] *= -1;
            } else if (mapping[IInd][0] > 0){
                ans[i] = IInd;
                mapping[IInd][0] *= -1;
            }
        }
        
        return ans;
    }
};

81505