public boolean sequenceReconstruction(int[] org, List<List<Integer>> seqs) {
Map<Integer, Set<Integer>> adjList = new HashMap<>();
Map<Integer, Integer> inDegree = new HashMap<>();
for (List<Integer> seq : seqs) {
adjList.putIfAbsent(num, new HashSet<>());
inDegree.putIfAbsent(num, 0);
for (List<Integer> seq : seqs) {
for (int i = 0; i < seq.size() - 1; i++) {
if (adjList.get(seq.get(i)).add(seq.get(i + 1))) {
inDegree.put(seq.get(i + 1), inDegree.get(seq.get(i + 1)) + 1);
// org can not be constructed from seqs because some number don't exist in org or sequences
if (org.length != inDegree.size()) {
Queue<Integer> queue = new LinkedList<>();
for (int num : inDegree.keySet()) {
if (inDegree.get(num) == 0) {
while (!queue.isEmpty()) {
// Cannot uniquely construct sequence
int curNum = queue.remove();
for (int nextNum : adjList.get(curNum)) {
inDegree.put(nextNum, inDegree.get(nextNum) - 1);
if (inDegree.get(nextNum) == 0) {
return count == org.length;