양말 짝 맞추기

시간 제한1초메모리 제한512 MB

요약
2n개의 양말이 주어졌을 때, 두 개의 스택과 세 가지 연산을 사용해 모든 양말을 짝지을 수 있는 최소 이동 횟수를 구하고, 불가능하면 impossible을 출력합니다.
난이도

어려움10점 중 8점

유형
스택, 그리디, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

Simone의 어머니는 Simone이 집안일을 전혀 돕지 않는다고 자주 불평한다. 그럴 때마다 Simone은 어머니가 시키는 집안일 중 상당수는 최적으로 해내려면 NP-complete라는 점을 지적하곤 한다. 집 청소하기, 저녁 식탁에 남동생들을 서로 다투지 않게 앉히기, 남동생들의 할로윈 사탕을 공평하게 나누기 등이 그렇다.

컴퓨터 과학자인 어머니는 이 지적이 타당하다고 본다. 어머니는 할 만한 집안일 목록을 훑어보다가 쉽게 풀 수 있을 것 같은 일 하나를 골랐다. 바로 여러 종류의 양말을 짝 맞추는 일이다.

처음에 2n2n개의 양말이 한 더미에 쌓여 있다. 양말을 짝 맞추기 위해 Simone은 다음 세 가지 동작 중 하나를 반복해서 할 수 있다.

  1. 원래 더미의 맨 위에 있는 양말을 보조 더미의 맨 위로 옮긴다. 보조 더미는 처음에 비어 있다.
  2. 보조 더미의 맨 위에 있는 양말을 원래 더미의 맨 위로 옮긴다.
  3. 두 더미의 맨 위에 있는 양말이 같은 종류이면 두 양말을 짝지어 없앤다.

Simone에게는 보조 더미가 하나뿐이고, 더미는 모두 두 개다. 각 종류마다 양말이 두 개보다 많을 수도 있다. 이 경우 Simone은 원하는 대로 짝을 지을 수 있다.

Simone이 양말을 모두 짝지으려면 최소 몇 번 움직여야 하는지, 애초에 가능하기는 한지 구하자.

입력

첫째 줄에 정수 nn이 주어진다 (1≤n≤1051 \le n \le 10^5).

둘째 줄에 2n2n개의 정수 a1,…,a2na_1, \dots, a_{2n}이 주어진다 (1≤ai≤1091 \le a_i \le 10^9). aia_i는 ii번째 양말의 종류를 나타낸다. 처음에 양말 1이 더미의 맨 위에 있고 양말 2n2n이 맨 아래에 있다.

출력

Simone이 모든 양말을 짝지을 수 있으면 필요한 최소 동작 횟수를 출력한다. 짝지을 수 없으면 impossible을 출력한다.

예제3

  1. 예제 1

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

    입력
    1
    3 7
    
    예상 출력
    impossible
    
  3. 예제 3

    입력
    3
    5 5 5 5 5 5
    
    예상 출력
    6