젖 짜는 순서
시간 제한2초메모리 제한512 MB
M개의 관찰 목록 중에서 앞에서부터 최대로 사용할 수 있는 개수를 찾고, 그 제약을 만족하는 사전순 최소 위상 정렬을 출력한다.
문제
농부 존이 기르는 소 마리 ()에는 늘 그렇듯 번부터 번까지 번호가 붙어 있다. 소들은 발굽에 시간이 남아돌아서, 존이 아침마다 젖을 짜는 순서를 두고 복잡한 서열을 만들어 놓았다.
존은 몇 주 동안 소를 관찰해 서열에 관한 기록 개 ()를 남겼다. 기록 하나는 소 몇 마리를 나열한 순서 있는 목록이고, 목록에 적힌 순서 그대로 젖을 짜야 한다는 뜻이다. 예를 들어 기록이 2, 5, 1이면 존은 2번 소의 젖을 5번 소보다 먼저 짜야 하고, 5번 소의 젖을 1번 소보다 먼저 짜야 한다.
기록에는 우선순위가 있다. 존은 앞에서부터 개의 기록을 모두 지키는 젖 짜기 순서를 만들면서 를 최대로 하려고 한다. 앞의 개 기록을 지키는 순서가 여러 개라면, 번호가 작은 소가 번호가 큰 소보다 서열이 높다는 오랜 전통에 따라 번호가 작은 소부터 젖을 짠다. 즉 조건을 만족하는 순서 중 사전순으로 가장 작은 것을 고른다. 순서 가 순서 보다 사전순으로 작다는 것은, 어떤 가 있어서 인 모든 에 대해 이고 라는 뜻이다.
존이 소젖을 짜야 하는 가장 좋은 순서를 구하라.
입력
첫째 줄에 과 이 주어진다. 이어지는 개의 줄은 기록을 하나씩 나타낸다. 번째 줄은 번째 기록을 나타내며, 그 기록에 적힌 소의 수 가 먼저 오고 그 뒤에 소 번호 개가 기록된 순서대로 주어진다. 의 합은 최대 이다.
출력
부터 까지의 순열을 이루는 정수 개를 공백으로 구분해 출력한다. 이 순열이 존이 젖을 짜야 하는 순서다.
힌트
첫 번째 예제에서 존은 소 네 마리를 기른다. 첫 번째 기록은 1번 소를 2번 소보다, 2번 소를 3번 소보다 먼저 짜라는 뜻이다. 두 번째 기록은 4번 소를 2번 소보다 먼저 짜라는 뜻이고, 세 번째 기록은 3번 소를 4번 소보다, 4번 소를 1번 소보다 먼저 짜라는 뜻이다. 앞의 두 기록은 동시에 지킬 수 있지만, 세 기록을 모두 지키려면 1번 소가 3번 소보다 앞서면서 3번 소가 1번 소보다 앞서야 하므로 불가능하다. 따라서 가능한 순서는 1 4 2 3과 4 1 2 3 두 가지이고, 사전순으로 작은 쪽은 1 4 2 3이다.