60025 색깔 모으기

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

문제

2N2N개의 공과 N+1N+1개의 상자가 있다. 공들의 색깔은 1,2,,N1, 2, \cdots, N 중 하나이며, 각 색깔에 대해 그 색깔로 칠해진 공은 정확히 22개 있다. 각 상자는 공을 최대 22개까지 가지고 있을 수 있다. 처음에는 첫 번째 상자부터 NN번째 상자에 각각 22개의 공이 들어 있고, N+1N+1번째 상자는 비어 있다. ii번째 상자의 위에 있는 공의 색깔은 AiA_i이고, 아래에 있는 공의 색깔은 BiB_i이다.

한 상자에서 다른 상자로 공을 옮길 수 있는데, 상자의 가장 위에 있는 공을 빼서 다른 상자의 가장 위에 넣는 작업을 할 수 있다.

여러분은 같은 색으로 칠해진 22개의 공이 같은 상자에 들어가도록 공을 옮겨야 한다. 이때, 공을 옮기는 작업을 할 때마다 다음 두 조건 중 하나를 만족해야 한다.

  • 옮겨서 공을 놓으려는 상자가 완전히 비어 있어야 한다.
  • 옮겨서 공을 놓으려는 상자에 공이 정확히 하나 들어 있고, 이동하려는 공과 해당 상자에 있는 공의 색깔이 같아야 한다.

색깔이 같은 공이 같은 상자에 들어가도록 하기 위해 필요한 공의 이동 횟수의 최솟값을 구하는 프로그램을 작성하라.

예를 들어, 위 그림에서 아래와 같이 공을 옮기면 66번의 이동으로 색깔이 같은 공이 같은 상자에 들어가게 되고, 공을 66번보다 적게 옮겨서 목표를 달성하는 것은 불가능하다.

  • 네 번째 상자의 색깔이 33인 공을 여섯 번째 상자로 옮긴다.
  • 세 번째 상자의 색깔이 22인 공을 네 번째 상자로 옮긴다.
  • 첫 번째 상자의 색깔이 44인 공을 세 번째 상자로 옮긴다.
  • 두 번째 상자의 색깔이 33인 공을 여섯 번째 상자로 옮긴다.
  • 다섯 번째 상자의 색깔이 55인 공을 두 번째 상자로 옮긴다.
  • 다섯 번째 상자의 색깔이 11인 공을 첫 번째 상자로 옮긴다.

입력

첫 번째 줄에 NN이 주어진다.

두 번째 줄부터 NN개의 줄에 걸쳐 각 상자에 들어 있는 두 공들의 색깔이 주어진다. NN개의 줄 중 ii번째 줄에는 Ai,BiA_i, B_i가 공백으로 구분되어 주어진다.

출력

첫 번째 줄에 색깔이 같은 공이 같은 상자에 들어가도록 하기 위해 필요한 공의 이동 횟수의 최솟값을 출력한다.

단, 불가능하다면 1-1을 출력한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 1N2000001 \le N \le 200\,000
  • 1Ai,BiN1 \le A_i, B_i \le N
  • ii (1iN1 \le i \le N)에 대해서 A1,A2,,AN,B1,B2,,BNA_1, A_2, \cdots, A_N, B_1, B_2, \cdots, B_N중 정확히 22개의 값이 ii와 같다.

서브태스크

12N2N \le 2
223N20N \le 20
315색이 같은 공이 같은 상자에 들어가도록 공을 옮기는 방법이 존재한다.
415N2000N \le 2\,000
545추가 제약 조건 없음.

예제 입출력

예제 입력 1
5
4 1
3 5
2 4
3 2
5 1
예제 출력 1
6
예제 입력 2
2
1 1
2 2
예제 출력 2
0
예제 입력 3
4
2 1
3 1
2 4
3 4
예제 출력 3
-1

출처

올림피아드 한국정보올림피아드 KOI 2024 2차 초등부 3번 중등부 2번
solution.cpp
에디터 불러오는 중...