1var validArrangement = function (pairs) {2let graph = {};3let degrees = {}; // outdegree: positive, indegree: negative4for (var [x, y] of pairs) {5if (!graph[x]) graph[x] = [];6graph[x].push(y);7if (degrees[x] === undefined) degrees[x] = 0;8if (degrees[y] === undefined) degrees[y] = 0;9degrees[x]++;10degrees[y]--;11}12let start = pairs[0][0];13for (var [x] of pairs) {14if (degrees[x] === 1) start = x; // one extra outdegree15}16let ans = [];17dfs(start);1819function dfs(node) {20while ((graph[node] || []).length) {21let neighbor = graph[node].pop();22dfs(neighbor);23ans.push([node, neighbor]);24}25}26return ans.reverse();27};