만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

투표에서 이기기

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

요약
투표 순서에서 집계원(0)을 인접한 유권자와 바꿔 1번 정당이 이기도록 하는 최소 교환 횟수를 구합니다. 불가능하면 impossible을 출력합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 구현
정답자
아직 제출이 없습니다

문제

엘레쿠아도르에서는 매우 특이한 투표 방식을 쓴다. 선거 시간이 되면 nn명의 시민이 어떤 순서로든 투표소에 도착한다. 정당은 11번과 22번 두 곳뿐이다. 도착한 시민은 집계원이 아닌 이상 두 정당 중 한 곳에 투표한다. 집계원은 투표하지 않는다. 대신 자신이 도착한 시점에 두 정당의 득표 수를 센다. 한쪽의 득표 수가 다른 쪽보다 많으면 그 정당이 1점을 얻는다. 득표 수가 같으면 어느 정당도 점수를 얻지 못한다. 최종적으로 점수가 가장 많은 정당이 이긴다. 두 정당의 점수가 같으면 혼란이 일어난다.

당신은 11번 정당을 대표하는 엘레쿠아도르의 대통령이다. 다가오는 선거에서 자신의 집권이 끝날까 봐 걱정하고 있다. 다행히 방법이 있다. 당신은 국민 모두가 누구에게 투표할지, 누가 집계원인지, 그리고 모두의 도착 순서를 알고 있다. 적절한 전화를 걸면 집계원이 도착하는 시점에도 영향을 줄 수 있다. 한 번의 이동으로 도착 순서 목록에서 집계원을 바로 옆 사람과 맞바꿀 수 있다. 다만 인접한 두 비집계원끼리는 맞바꿀 수 없다.

11번 정당이 승리를 확실히 하려면 최소 몇 번 맞바꿔야 하는가?

입력

첫째 줄에 정수 nn(1≤n≤5 0001 \le n \le 5\,000)이 주어진다. 엘레쿠아도르의 시민 수다. 둘째 줄에는 길이가 nn인 문자열 ss가 주어진다. 문자열은 00, 11, 22로만 이루어지며, 시민이 투표소에 도착하는 순서를 나타낸다. sis_i가 11 또는 22이면 ii번째 시민은 각각 11번 또는 22번 정당에 투표한다. sis_i가 00이면 ii번째 시민은 집계원이다.

출력

11번 정당이 승리를 확실히 할 수 있으면 필요한 맞바꿈의 최소 횟수를 정수 하나로 출력한다. 그렇지 않으면 impossible을 출력한다.

예제3

  1. 예제 1

    입력
    8
    12210020
    
    예상 출력
    4
    
  2. 예제 2

    입력
    4
    1111
    
    예상 출력
    impossible
    
  3. 예제 3

    입력
    11
    00211222220
    
    예상 출력
    5