배정 문제
시간 제한4초메모리 제한256 MB
각 자리의 후보 순위가 주어질 때, 순위와 맞는 이익 행렬에서 최적 배정이 하나뿐이고 그 배정에 포함되는 후보를 모두 찾습니다.
배정 문제
회사에는 개의 빈자리가 있고, 이 자리에 지원한 후보는 명()이다. 정확히 명을 뽑아야 하며, 같은 후보를 두 개 이상의 자리에 뽑을 수는 없다. 각 자리에 서로 다른 후보를 하나씩 고르는 방법을 배정이라고 부른다. 두 배정은 어떤 자리에 뽑힌 후보가 하나라도 다르면 서로 다른 배정이다.
행렬 는 이익을 나타낸다. 은 번째 자리에 번째 후보를 뽑았을 때 얻는 이익이다. 뽑은 후보들의 이익 합을 최대로 만들고자 한다. 이익 합이 최대인 배정이 최적 배정이다.
행렬 가 주어졌다면 가장 좋은 후보를 고르는 것은 쉽다. 하지만 는 주어지지 않는다. 우리가 아는 것은 각 자리마다 후보들의 순위뿐이다. 정확히 말하면, 길이가 인 순열 가 개 주어지고, 모든 과 에 대해 가 성립한다.
후보 는 다음 조건을 만족하면 유망하다. 주어진 모든 순위와 일치하는 행렬 가 존재하고, 그 에서 최적 배정이 오직 하나뿐이며, 그 배정에 후보 가 뽑혀 있다. 유망한 후보를 모두 찾아 더 철저하게 검사하려고 한다.
입력
첫 줄에 두 정수 과 (, )이 주어진다. 각각 후보의 수와 자리의 수이다.
다음 개의 줄에는 각 줄마다 부터 까지의 수로 이루어진 순열 이 주어진다. 번째 자리에 대한 후보들의 순위이다.
출력
첫 줄에 유망한 후보의 수를 출력한다. 둘째 줄에는 유망한 후보의 번호를 오름차순으로 출력한다.