양말 짝 맞추기
시간 제한1초메모리 제한512 MB
2n개의 양말이 주어졌을 때, 두 개의 스택과 세 가지 연산을 사용해 모든 양말을 짝지을 수 있는 최소 이동 횟수를 구하고, 불가능하면 impossible을 출력합니다.
문제
Simone의 어머니는 Simone이 집안일을 전혀 돕지 않는다고 자주 불평한다. 그럴 때마다 Simone은 어머니가 시키는 집안일 중 상당수는 최적으로 해내려면 NP-complete라는 점을 지적하곤 한다. 집 청소하기, 저녁 식탁에 남동생들을 서로 다투지 않게 앉히기, 남동생들의 할로윈 사탕을 공평하게 나누기 등이 그렇다.
컴퓨터 과학자인 어머니는 이 지적이 타당하다고 본다. 어머니는 할 만한 집안일 목록을 훑어보다가 쉽게 풀 수 있을 것 같은 일 하나를 골랐다. 바로 여러 종류의 양말을 짝 맞추는 일이다.
처음에 개의 양말이 한 더미에 쌓여 있다. 양말을 짝 맞추기 위해 Simone은 다음 세 가지 동작 중 하나를 반복해서 할 수 있다.
- 원래 더미의 맨 위에 있는 양말을 보조 더미의 맨 위로 옮긴다. 보조 더미는 처음에 비어 있다.
- 보조 더미의 맨 위에 있는 양말을 원래 더미의 맨 위로 옮긴다.
- 두 더미의 맨 위에 있는 양말이 같은 종류이면 두 양말을 짝지어 없앤다.
Simone에게는 보조 더미가 하나뿐이고, 더미는 모두 두 개다. 각 종류마다 양말이 두 개보다 많을 수도 있다. 이 경우 Simone은 원하는 대로 짝을 지을 수 있다.
Simone이 양말을 모두 짝지으려면 최소 몇 번 움직여야 하는지, 애초에 가능하기는 한지 구하자.
입력
첫째 줄에 정수 이 주어진다 ().
둘째 줄에 개의 정수 이 주어진다 (). 는 번째 양말의 종류를 나타낸다. 처음에 양말 1이 더미의 맨 위에 있고 양말 이 맨 아래에 있다.
출력
Simone이 모든 양말을 짝지을 수 있으면 필요한 최소 동작 횟수를 출력한다. 짝지을 수 없으면 impossible을 출력한다.