만드는 중입니다

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

마작

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

요약
색이 같은 타일 두 개가 같은 행이나 열의 끝에 있을 때만 제거할 수 있는 판이 주어집니다. 가장 많이 제거할 수 있는 순서와 제거한 색의 번호를 출력합니다.
난이도

어려움10점 중 8점

유형
그래프, 구현
정답자
아직 제출이 없습니다

문제

페탸는 최근 마작이라는 게임을 알게 되었다. 그는 이 게임이 너무 재미있어서 하루 종일 게임을 한다. 게임에는 m×nm \times n 칸의 직사각형 보드와 색이 서로 다른 말들의 세트가 필요하다. 세트에서 각 색의 말은 정확히 두 개씩 있다. 게임을 시작할 때 말은 보드 위에 임의로 놓인다.

한 번의 이동에서 같은 색인 말 두 개를 제거할 수 있다. 단, 두 말이 모두 자기 가로줄에서 가장 오른쪽에 있거나, 모두 자기 가로줄에서 가장 왼쪽에 있거나, 모두 자기 세로줄에서 가장 아래에 있거나, 모두 자기 세로줄에서 가장 위에 있어야 한다. 그런 말 쌍이 없으면 게임이 끝난다.

예를 들어 아래 그림은 두 번의 이동을 할 수 있는 위치를 보여준다. 네 번째 색의 말 두 개는 각자 가로줄에서 가장 왼쪽에 있으므로 제거할 수 있고, 첫 번째 색의 말 두 개는 각자 세로줄에서 가장 위에 있으므로 제거할 수 있다.

목표는 가능한 한 많은 이동을 하는 것이다. 주어진 초기 배치에서 페탸가 할 수 있는 가장 긴 이동 순서를 구하라.

입력

첫 줄에는 보드의 크기 m과 n이 주어진다. 1≤m,n≤3001 \le m, n \le 300이며, m과 n 중 적어도 하나는 짝수이다. 이어서 m개의 줄이 주어지고, 각 줄에는 n개의 정수가 있다. i번째 줄의 j번째 정수는 i번째 가로줄에서 왼쪽부터 j번째 칸에 있는 말의 색 번호이다. 색 번호는 1부터 mn2\frac{mn}{2}까지의 자연수이며, 보드에는 각 색의 말이 정확히 두 개씩 있다.

출력

첫 줄에 페탸가 주어진 시작 위치에서 할 수 있는 최대 이동 횟수 k를 출력한다. 둘째 줄에는 말을 제거한 순서대로 색 번호 k개를 공백으로 구분해 출력한다. 답이 여러 개이면 그중 아무거나 출력해도 된다.

예제2

  1. 예제 1

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

    입력
    4 4
    4 1 3 6
    5 2 5 2
    1 7 3 8
    4 6 7 8
    
    예상 출력
    3
    4 1 8