#include <stdio.h>
#include <vector>
#include <queue>
int indegree[1010];
int G[1010][1010];
int main() {
int n, m, vcnt=0;
scanf("%d %d", &n, &m);
for(int i=0; i<m; i++) {
int K, arr[1010]={};
scanf("%d", &K);
for(int j=0; j<K; j++) scanf("%d", &arr[j]);
for(int j=0; j<K; j++) {
for(int k=j+1; k<K; k++) {
if(!G[arr[j]][arr[k]]) {
G[arr[j]][arr[k]]=1;
indegree[arr[k]]++;
}
}
}
}
int flag=0;
std::queue<int> q;
std::vector<int> v;
while(vcnt<n) {
for(int i=1; i<=n; i++) {
if(indegree[i]==0) {
q.push(i);
indegree[i]=-1;
}
if(i==n&&q.empty()) { // 끝까지 왔는데 큐가 비어있는 경우
flag=1;
}
}
if(flag) break;
while(!q.empty()) {
int S=q.front(); q.pop();
v.push_back(S);
vcnt++;
for(int j=1; j<=n; j++) {
if(G[S][j])
indegree[j]--;
}
}
}
if(flag) printf("0");
else {
for(int i=0; i<v.size(); i++)
printf("%d\n", v[i]);
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: