class Solution {
public:
bool sequenceReconstruction(vector<int>& org, vector<vector<int>>& seqs) {
if (seqs.size() == 0)
return false;
int len = org.size();
vector<vector<int>> map(len + 1);
vector<int> indegree(len + 1, 0);
queue<int> q;
vector<int> order;
for (auto& ele : seqs)
{
if (ele[0] > len || ele[0] <= 0)
return false;
for (int i = 1; i < ele.size(); i++)
{
if ( ele[i] > len || ele[i] <= 0)
return false;
map[ele[i-1]].push_back(ele[i]);
indegree[ele[i]]++;
}
}
for (int i = 1; i <= len; i++)
if (indegree[i] == 0)
q.push(i);
if (q.size() != 1)
return false;
while(!q.empty())
{
int node = q.front();
q.pop();
order.push_back(node);
int cnt = 0;
for (int i : map[node])
{
indegree[i]--;
if (indegree[i] == 0)
{
cnt++;
q.push(i);
}
}
if (cnt > 1)
return false;
}
return order == org;
}
};