/* * 2026년도 한국정보올림피아드 2차 대회 * * 간식 분배 (snack) * 초등부 3번 / 중등부 2번 / 고등부 1번 * Main Correct Solution (C++) */ #include #include #include using namespace std; vector adj[200'010], radj[200'010]; int n[200'010]; int used[200'010]; int vis[200'010]; signed main() { ios::sync_with_stdio(false), cin.tie(nullptr); int N; cin >> N; queue q; for (int i = 1; i <= N; i++) { cin >> n[i]; if (n[i] == 1) { vis[i] = 1; q.push(i); } for (int j = 1; j <= n[i]; j++) { int a; cin >> a; adj[i].push_back(a); radj[a].push_back(i); } } vector P; while (q.size()) { int t = q.front(); q.pop(); int s = 0; for (auto a : adj[t]) { if (used[a]) continue; s = a; break; } if (!s) { cout << -1; return 0; } used[s] = 1; P.push_back(t); for (auto i : radj[s]) { if (vis[i]) continue; n[i]--; if (n[i] <= 1) { vis[i] = 1; q.push(i); } } } if (P.size() < N) { cout << -1; return 0; } for (auto i : P) cout << i << ' '; return 0; }