아름다운 강산

아직 제출이 없습니다시간 제한20초메모리 제한128 MB

문제

도영이는 블록을 쌓아 만든 스택을 가지고 노는 것을 좋아한다. 스택 하나하나를 산으로 여기고 자기만의 지형을 만든다.

스택은 모두 일렬로 놓여 있고, 도영이는 한 번에 블록 하나만 옮긴다. 한 번의 움직임은 이웃한 두 스택 중 한쪽의 맨 위 블록을 다른 쪽 스택 위로 옮기는 것이다. 도영이는 언제나 이 방법으로만 블록을 재배열한다.

블록이 하나 이상 쌓인 스택을 산이라고 한다. 두 산 사이의 거리는 두 스택의 위치 번호 차이다. 어떤 두 산을 골라도 그 거리가 소수이면 그 지형이 바로 아름다운 강산이다. 서로 이웃하지 않은 두 산도 모두 따져야 한다. 산이 하나뿐인 지형도 아름다운 강산이다.

예를 들어 왼쪽부터 블록이 1, 2, 1, 3, 2, 1, 2, 1개씩 쌓여 있다고 하자. 산을 두 개만 남기려면 아무리 잘 옮겨도 12번을 움직여야 한다. 하지만 2번, 4번, 7번 스택을 산으로 정하면 6번 만에 아름다운 강산이 된다. 세 산 사이의 거리가 각각 2, 3, 5로 모두 소수이기 때문이다.

블록의 현재 상태가 주어지면, 도영이가 아름다운 강산을 만드는 데 필요한 최소 움직임 횟수를 구하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다.

각 테스트 케이스의 첫 줄에는 스택의 개수 nn (1n300001 \le n \le 30000)이 주어진다. 다음 줄에는 정수 bb (0b10000 \le b \le 1000)가 nn개 주어지며, 왼쪽 스택부터 차례대로 그 스택에 쌓인 블록의 개수를 나타낸다. 두 정수는 공백 하나로 구분하고, 줄의 처음과 끝에는 공백이 없다. 블록이 하나도 없는 스택도 0으로 적는다.

입력의 마지막 줄에는 0 하나만 주어진다. 이 줄은 테스트 케이스가 아니라 입력이 끝났다는 표시다.

출력

각 테스트 케이스마다 아름다운 강산을 만드는 데 필요한 최소 움직임 횟수를 한 줄에 하나씩 출력한다. 다른 공백이나 빈 줄은 출력하지 않는다.