두 체스판
시간 제한1초메모리 제한1024 MB
두 N×N 체스판에 각각 N개의 룩이 놓여 있을 때, 두 판 사이에서 룩을 맞바꿔 어느 판에서도 룩끼리 공격하지 못하게 만드는 최소 교환 횟수를 구합니다. 불가능하면 -1을 출력합니다.
문제
크기의 체스판 두 개에 룩이 각각 개씩 올라가 있다. 룩은 같은 체스판의 같은 열이나 같은 행에 있는 다른 룩을 공격할 수 있다.
두 체스판의 룩을 적절히 교환하여 두 체스판 위의 어떠한 룩도 다른 룩을 공격하지 못하게 만들려고 한다.
룩을 교환하는 방법은 다음과 같다. 체스판의 행 열을 로 나타낼 때, 번 체스판의 에 있는 룩과 번 체스판의 에 있는 룩을 교환하면 번 체스판의 와 번 체스판의 에 각각 룩이 생기고, 기존 위치에 있던 두 룩은 사라진다.
체스판의 한 칸에는 룩이 최대 한 개만 올라갈 수 있다. 따라서 룩이 생길 위치에 이미 다른 룩이 있다면 그 룩은 교환할 수 없다. 예를 들어, 번 체스판의 에 룩이 있다면 번 체스판의 에 있는 룩은 번 체스판의 에 있는 룩을 제외한 번 체스판 위의 모든 룩과 교환할 수 없다.
최소 몇 번의 교환으로 두 체스판 위의 어떠한 룩도 다른 룩을 공격하지 못하게 만들 수 있을까?
입력
첫 번째 줄에 정수 이 주어진다. ()
다음 개의 줄에 번 체스판 위의 각 룩이 있는 행의 번호 와 열의 번호 가 공백으로 구분되어 주어진다. ()
다음 개의 줄에 번 체스판 위의 각 룩이 있는 행의 번호 와 열의 번호 가 공백으로 구분되어 주어진다. ()
같은 체스판에서는 같은 좌표가 두 번 주어지지 않는다.
출력
두 체스판 위의 어떠한 룩도 다른 룩을 공격할 수 없는 상태를 만들기 위한 최소한의 교환 횟수를 출력한다.
룩을 어떻게 교환하더라도 두 체스판 위의 어떠한 룩도 다른 룩을 공격할 수 없는 상태를 만들 수 없다면 대신 을 출력한다.