만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

배정 문제

시간 제한4초메모리 제한256 MB

요약
각 자리의 후보 순위가 주어질 때, 순위와 맞는 이익 행렬에서 최적 배정이 하나뿐이고 그 배정에 포함되는 후보를 모두 찾습니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 비트 연산, 그래프
정답자
아직 제출이 없습니다

배정 문제

회사에는 mm개의 빈자리가 있고, 이 자리에 지원한 후보는 nn명(n≥mn \ge m)이다. 정확히 mm명을 뽑아야 하며, 같은 후보를 두 개 이상의 자리에 뽑을 수는 없다. 각 자리에 서로 다른 후보를 하나씩 고르는 방법을 배정이라고 부른다. 두 배정은 어떤 자리에 뽑힌 후보가 하나라도 다르면 서로 다른 배정이다.

행렬 AA는 이익을 나타낸다. Aij≥0A_{ij} \ge 0은 ii번째 자리에 jj번째 후보를 뽑았을 때 얻는 이익이다. 뽑은 후보들의 이익 합을 최대로 만들고자 한다. 이익 합이 최대인 배정이 최적 배정이다.

행렬 AA가 주어졌다면 가장 좋은 후보를 고르는 것은 쉽다. 하지만 AA는 주어지지 않는다. 우리가 아는 것은 각 자리마다 후보들의 순위뿐이다. 정확히 말하면, 길이가 nn인 순열 PiP_i가 mm개 주어지고, 모든 1≤i≤m1 \le i \le m과 1≤x<y≤n1 \le x < y \le n에 대해 AiPix>AiPiyA_{iP_{ix}} > A_{iP_{iy}}가 성립한다.

후보 kk는 다음 조건을 만족하면 유망하다. 주어진 모든 순위와 일치하는 행렬 AA가 존재하고, 그 AA에서 최적 배정이 오직 하나뿐이며, 그 배정에 후보 kk가 뽑혀 있다. 유망한 후보를 모두 찾아 더 철저하게 검사하려고 한다.

입력

첫 줄에 두 정수 nn과 mm(1≤m≤111 \le m \le 11, m≤n≤1000m \le n \le 1000)이 주어진다. 각각 후보의 수와 자리의 수이다.

다음 mm개의 줄에는 각 줄마다 11부터 nn까지의 수로 이루어진 순열 Pi1,Pi2,…,PinP_{i1}, P_{i2}, \ldots, P_{in}이 주어진다. ii번째 자리에 대한 후보들의 순위이다.

출력

첫 줄에 유망한 후보의 수를 출력한다. 둘째 줄에는 유망한 후보의 번호를 오름차순으로 출력한다.

예제2

  1. 예제 1

    입력
    4 2
    1 2 4 3
    1 3 4 2
    
    예상 출력
    3
    1 2 3
    
  2. 예제 2

    입력
    4 2
    1 4 3 2
    2 3 4 1
    
    예상 출력
    2
    1 2