마작
시간 제한2초메모리 제한1024 MB
색이 같은 타일 두 개가 같은 행이나 열의 끝에 있을 때만 제거할 수 있는 판이 주어집니다. 가장 많이 제거할 수 있는 순서와 제거한 색의 번호를 출력합니다.
문제
페탸는 최근 마작이라는 게임을 알게 되었다. 그는 이 게임이 너무 재미있어서 하루 종일 게임을 한다. 게임에는 칸의 직사각형 보드와 색이 서로 다른 말들의 세트가 필요하다. 세트에서 각 색의 말은 정확히 두 개씩 있다. 게임을 시작할 때 말은 보드 위에 임의로 놓인다.
한 번의 이동에서 같은 색인 말 두 개를 제거할 수 있다. 단, 두 말이 모두 자기 가로줄에서 가장 오른쪽에 있거나, 모두 자기 가로줄에서 가장 왼쪽에 있거나, 모두 자기 세로줄에서 가장 아래에 있거나, 모두 자기 세로줄에서 가장 위에 있어야 한다. 그런 말 쌍이 없으면 게임이 끝난다.
예를 들어 아래 그림은 두 번의 이동을 할 수 있는 위치를 보여준다. 네 번째 색의 말 두 개는 각자 가로줄에서 가장 왼쪽에 있으므로 제거할 수 있고, 첫 번째 색의 말 두 개는 각자 세로줄에서 가장 위에 있으므로 제거할 수 있다.

목표는 가능한 한 많은 이동을 하는 것이다. 주어진 초기 배치에서 페탸가 할 수 있는 가장 긴 이동 순서를 구하라.
입력
첫 줄에는 보드의 크기 m과 n이 주어진다. 이며, m과 n 중 적어도 하나는 짝수이다. 이어서 m개의 줄이 주어지고, 각 줄에는 n개의 정수가 있다. i번째 줄의 j번째 정수는 i번째 가로줄에서 왼쪽부터 j번째 칸에 있는 말의 색 번호이다. 색 번호는 1부터 까지의 자연수이며, 보드에는 각 색의 말이 정확히 두 개씩 있다.
출력
첫 줄에 페탸가 주어진 시작 위치에서 할 수 있는 최대 이동 횟수 k를 출력한다. 둘째 줄에는 말을 제거한 순서대로 색 번호 k개를 공백으로 구분해 출력한다. 답이 여러 개이면 그중 아무거나 출력해도 된다.