using
System;
using
System.Collections;
using
System.Collections.Generic;
class
GFG
{
static
bool
shortestSuperSeq(List<List<
int
>> arr,
int
N,
int
M)
{
Dictionary<
int
, List<
int
>> adj =
new
Dictionary<
int
, List<
int
>>();
Dictionary<
int
,
int
> indegree =
new
Dictionary<
int
,
int
>();
for
(
int
i = 0 ; i < N ; i++) {
for
(
int
j = 0 ; j < M ; j++) {
int
node = arr[i][j];
if
(!adj.ContainsKey(node)){
adj.Add(node,
new
List<
int
>());
indegree.Add(node, 0);
}
}
}
foreach
(List<
int
> seq
in
arr) {
for
(
int
i = 1 ; i < M ; i++) {
if
(!adj.ContainsKey(seq[i-1])){
adj.Add(seq[i-1],
new
List<
int
>());
}
adj[seq[i-1]].Add(seq[i]);
if
(!indegree.ContainsKey(seq[i])){
indegree.Add(seq[i], 0);
}
int
temp = indegree[seq[i]];
indegree[seq[i]] = temp + 1;
}
}
List<
int
> res =
new
List<
int
>();
List<
int
> q =
new
List<
int
>();
int
l = 0, r = -1;
foreach
(KeyValuePair<
int
,
int
> itr
in
indegree) {
if
(indegree[itr.Key] == 0) {
q.Add(itr.Key);
r++;
}
}
while
(l <= r) {
int
size = r - l + 1;
if
(size != 1)
return
false
;
int
node = q[l];
res.Add(node);
r--;
for
(
int
i = 0 ; i < adj[node].Count ; i++) {
int
connected_node = adj[node][i];
int
temp = indegree[connected_node] - 1;
indegree[connected_node] = temp;
if
(temp == 0) {
if
(q.Count - 1 == r){
q.Add(connected_node);
}
else
{
q[r + 1] = connected_node;
}
r++;
}
}
}
foreach
(KeyValuePair<
int
,
int
> itr
in
indegree) {
if
(itr.Value != 0)
return
false
;
}
return
true
;
}
public
static
void
Main(
string
[] args){
List<List<
int
>> arr =
new
List<List<
int
>>();
arr.Add(
new
List<
int
>{1, 2});
arr.Add(
new
List<
int
>{1, 3});
int
N = arr.Count;
int
M = arr[0].Count;
if
(shortestSuperSeq(arr, N, M))
Console.WriteLine(
"True"
);
else
Console.WriteLine(
"False"
);
}
}