만드는 중입니다

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

검색 결과 모으기

면접 대비

시간 제한3초메모리 제한1024 MB

요약
n개의 결과에 대한 k개 검색 엔진의 순위가 주어질 때, 각 엔진 순위와의 위치 차이 제곱합이 최소가 되는 통합 순위를 구합니다.
난이도

보통10점 중 5점

유형
정렬, 그리디, 수학
정답자
아직 제출이 없습니다

문제

당신은 Benelux Algorithm Preview Collector라는 알고리즘 전용 새 검색 엔진을 만들고 있습니다. 홍보는 이미 끝났고 투자자도 많이 확보했지만, 아직 코드는 한 줄도 쓰지 않았습니다. 출시까지 남은 시간이 다섯 시간뿐이라 직접 랭킹 알고리즘을 구현할 시간은 없습니다. 그래서 사용자가 알고리즘을 검색할 때마다 검색어를 가장 인기 있는 다른 검색 엔진 kk 개에 전달하고, 그 결과를 사용하기로 합니다.

이 kk 개의 검색 엔진은 각각 관련도 추정값 순으로 정렬된 nn 개의 결과 목록을 줍니다. 시험해 본 어떤 검색어에 대해서도 검색 엔진들은 항상 같은 nn 개의 결과를 반환하며, 엔진마다 순서만 다릅니다. 이 kk 개의 순위를 하나의 순위로 합쳐야 합니다.

합쳐진 순위에는 비용을 매깁니다. 각 결과 rr과 각 검색 엔진 ss에 대해, 합쳐진 순위가 rr을 위치 ii에 두고 검색 엔진 ss가 rr을 위치 jj에 두었다면 비용은 (i−j)2(i-j)^2입니다. 합쳐진 순위의 총비용은 계산된 k⋅nk \cdot n 개의 비용을 모두 더한 값입니다.

예를 들어 두 번째 샘플 케이스를 봅시다. 첫 번째 검색 엔진은 샘플 출력과 같은 결과를 주므로 비용은 00입니다. 두 번째 검색 엔진은 인접한 두 결과를 맞바꾸므로 비용은 1+1=21+1=2입니다. 세 번째 검색 엔진은 첫 번째 결과를 두 칸 뒤로 보내고, 나머지 두 결과를 각각 한 칸씩 앞으로 당기므로 비용은 4+1+1=64+1+1=6입니다. 총비용은 0+2+6=80+2+6=8이며, 가능한 모든 순서 중 최소입니다.

BAPC는 총비용이 최소가 되도록 결과를 어떤 순서로 출력해야 할까요?

입력

입력은 다음과 같습니다.

  • 결과의 개수 nn과 검색 엔진의 개수 kk가 주어지는 한 줄 (1≤n≤50001\leq n\leq 5000, 1≤k≤1001\leq k\leq 100)
  • kk 줄. 각 줄에는 어떤 검색 엔진이 정렬한 결과 순서대로 nn 개의 정수가 주어집니다. 각 줄에는 11부터 nn까지의 정수가 정확히 한 번씩 나타납니다.

출력

비용이 최소가 되도록 합쳐진 결과의 순서를 출력하세요.

유효한 해가 여러 개라면 그중 아무거나 출력해도 됩니다.

예제3

  1. 예제 1

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

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

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