시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 2 0 0 0.000%

문제

큐 Q, 스택 A, 스택 B와 다음과 같은 연산이 있다.

QA(n): Q에서 수 하나를 빼고, A에 넣는다. 이 작업을 n번 반복한다.

QB(n): Q에서 수 하나를 빼고, B에 넣는다. 이 작업을 n번 반복한다.

QQ(n): Q에서 수 하나를 빼고, Q에 넣는다. 이 작업을 n번 반복한다.

AQ(n): A에서 수 하나를 빼고, Q에 넣는다. 이 작업을 n번 반복한다.

BQ(n): B에서 수 하나를 빼고, Q에 넣는다. 이 작업을 n번 반복한다.

AB(n): A에서 수 하나를 빼고, B에 넣는다. 이 작업을 n번 반복한다.

BA(n): B에서 수 하나를 빼고, A에 넣는다. 이 작업을 n번 반복한다.

위의 연산은 n의 값에 상관없이 모두 각각 한 번으로 친다.

처음에 큐에 수가 이미 채워져 있고, 두 스택은 비어있다. 이 때, 큐에 수를 오름차순으로 만들때 필요한 연산의 최소값은 몇 번일까?

예를 들어, 큐에 수가 (4 3 1 2 0)과 같이 채워져 있다고 하자. 이 때, 큐는 다음과 같이 3번만에 정렬할 수 있다. QA(2), QQ(2), AQ(2) 

또, (5 4 1 3 2 0)과 같이 채워져 있다면, 4번만에 정렬할 수 있다. QB(2), QQ(1), QB(2), BQ(4)

큐에 들어있는 수를 정렬하기 위해 필요한 연산의 최소값을 구하는 프로그램을 작성하시오.

입력

입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫번째 숫자는 큐에 들어있는 수의 개수 N이다. 다음 N개의 수는 큐에 들어있는 수가 앞에서부터 순서대로 주어진다. 큐에 들어있는 수는 모두 0보다 크거나 같고, N-1보다 작거나 같은 정수이다. 또, 한 숫자는 한 번씩만 주어진다. N은 10을 넘지 않는다.

입력의 마지막 줄에는 0이 하나 주어진다.

출력

각 테스트 케이스에 대해서, 큐를 정렬하는데 필요한 연산의 최소값을 출력한다.

예제 입력

5 4 3 1 2 0
6 5 4 1 3 2 0
0

예제 출력

3
4

힌트