만드는 중입니다

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

커플 파괴자 민욱이 (Small)

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

요약
N명이 한 줄로 선 배열을 연속된 그룹으로 나눈 뒤, 커플이 서로 붙지 않도록 그룹 순서를 바꾸는 최소 그룹 수와 배치를 구합니다.
난이도

보통10점 중 7점

유형
배열, 그리디, 그래프
정답자
아직 제출이 없습니다

문제

Small 버전에서는 가능한 방법 중 아무거나 11가지만 출력한다.

'커플 파괴자 민욱이'는 솔로이기 때문에 커플끼리 함께 있는 모습을 보기 싫어한다. 그러한 민욱이가 사람들 NN명이 일렬로 서 있는 대기 줄 하나를 발견했다. 민욱이는 이 대기 줄을 MM개의 묶음으로 나눈 뒤, 묶음의 순서를 바꾸어 어떠한 커플끼리도 이웃하지 않게 할 것이다. 단, 같은 묶음에 있는 사람들끼리의 순서를 바꾸거나 거꾸로 뒤집을 수는 없다. 각 묶음의 사람 수는 일정하지 않고 서로 달라도 된다.

MM이 크면 묶음의 순서를 바꾸는 민욱이의 머리가 아프기 때문에, 민욱이는 MM을 최소로 만들려고 한다. 그리고 MM이 최소일 때 가능한 방법 중 아무거나 11가지만 구하려고 한다.

입력

1번째 줄에 사람들의 수를 나타내는 정수 NN(1≤N≤1031 \le N \le 10^{3})이 주어진다.

2번째 줄에 각 사람의 정보를 나타내는 정수 a1,a2,a3,⋯ ,aNa_{1}, a_{2}, a_{3}, \cdots, a_{N}(0≤ai≤1030 \le a_{i} \le 10^{3})이 공백으로 구분되어 주어진다. aia_{i}는 대기 줄의 앞에서 ii번째에 서 있는 사람의 정보이다. ai=0a_i = 0이면 그 사람은 솔로이고, ai=aja_i = a_j이고 ai≠0a_i \ne 0이면 두 사람은 커플이다. 0이 아닌 수는 a1,a2,a3,⋯ ,aNa_{1}, a_{2}, a_{3}, \cdots, a_{N}에 반드시 두 번씩 존재한다.

출력

1번째 줄에는 MM의 최솟값을 출력한다.

2번째 줄에는 1번 묶음, 2번 묶음, ..., MM번 묶음의 사람 수를 공백으로 구분하여 출력한다.

3번째 줄에는 묶음의 순서를 바꾼 뒤, 대기 줄의 앞에서부터 묶음의 번호를 출력한다.

어떻게 묶음으로 나누고 배열하더라도 항상 한 커플 이상이 이웃한다면, 1번째 줄에 −1-1을 출력하고 그다음 줄부터는 아무것도 출력하지 않는다.

예제2

  1. 예제 1

    입력
    6
    3 1 1 3 2 2
    
    예상 출력
    3
    2 3 1
    1 3 2
    
  2. 예제 2

    입력
    4
    0 0 0 0
    
    예상 출력
    1
    4
    1