만드는 중입니다

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

머리 묶기

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

요약
0에서 3 사이의 값이 담긴 배열에서 구간을 골라 그 구간의 XOR 값으로 덮어써 3이 남지 않게 하는 최소 연산 횟수를 구합니다.
난이도

보통10점 중 6점

유형
배열, 누적 합, 동적 계획법
정답자
아직 제출이 없습니다

문제

시현이는 사람들의 헤어 스타일을 바꾸어 묶는 것을 좋아한다. 헤어 스타일은 00 (생머리), 11 (포니테일), 22 (양갈래), 33 (세갈래) 중 하나이다.

사람들의 헤어 스타일 A1,A2,⋯ ,ANA_1, A_2, \cdots, A_N이 주어졌을 때, 시현이는 ll과 rr을 골라 ll번째부터 rr번째 사람의 헤어 스타일을 모두 한꺼번에 Al⊕Al+1⊕⋯⊕ArA_l \oplus A_{l+1} \oplus \cdots \oplus A_r로 바꿀 수 있다. ⊕\oplus는 비트 단위 XOR 연산자이다.

시현이는 모양이 이상한 세갈래를 싫어해서, 어떤 사람의 헤어 스타일도 세갈래가 되지 않도록 하려고 한다. 헤어 스타일을 바꾸는 최소 횟수를 구해 보자.

입력

입력은 여러 개의 테스트케이스로 이루어져 있다. 첫째 줄에 테스트케이스의 수 TT가 주어진다. (1≤T≤20 0001 \le T \le 20\,000)

각 테스트케이스의 첫째 줄에 NN이 주어진다. (1≤N≤1061 \leq N \leq 10^6)

둘째 줄에 NN명의 헤어 스타일 A1,A2,⋯ ,ANA_1, A_2, \cdots, A_N이 공백으로 구분되어 주어진다. (0≤Ai≤30 \leq A_i \leq 3)

모든 테스트케이스의 NN의 합은 10610^6을 넘지 않는다.

출력

각 테스트케이스마다 한 줄에, 세갈래가 남지 않도록 할 수 있다면 헤어 스타일을 바꾸는 최소 횟수를 출력한다. 어떻게 바꾸어도 세갈래가 남는다면 −1-1을 출력한다.

예제1

  1. 예제 1

    입력
    5
    4
    3 0 1 2
    4
    1 3 3 3
    4
    3 1 2 3
    3
    3 3 3
    1
    3
    
    예상 출력
    1
    1
    2
    3
    -1