커플 파괴자 민욱이 (Small)

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

요약
대기 줄을 최소 개수의 연속한 묶음으로 나눈 뒤, 어떤 커플도 이웃하지 않도록 묶음의 순서를 바꾸어 각 묶음의 크기와 묶음 순서를 출력한다.
난이도

보통10점 중 6점

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

문제

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

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

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

입력

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

22번째 줄에 각 사람의 정보를 나타내는 정수 a_1,a_2,a_3,⋯ ,a_Na\_{1}, a\_{2}, a\_{3}, \cdots, a\_{N} (0≤a_i≤103)(0 \le a\_{i} \le 10^{3})이 공백으로 구분되어 주어진다. a_ia\_{i}는 대기 줄의 앞에서부터 ii번째에 서 있는 사람의 정보를 나타낸다. a_i=0a\_{i} = 0이라면 그 사람이 솔로임을, a_i=a_ja\_i = a\_j이고 a_i≠0a\_i \ne 0이라면 두 사람이 커플임을 의미한다. 00이 아닌 수가 a_1,a_2,a_3,⋯ ,a_Na\_{1}, a\_{2}, a\_{3}, \cdots, a\_{N}에 존재한다면 그 수는 무조건 두 번 존재한다.

출력

각 묶음의 번호를 대기 줄의 앞에서부터 1,2,3,⋯ ,M1, 2, 3, \cdots, M이라고 매길 때, 아래의 형식에 맞춰 가능한 방법을 출력한다.

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

22번째 줄에는 11번 묶음, 22번 묶음, 33번 묶음, ⋯\cdots, MM번 묶음의 사람 수를 공백으로 구분하여 출력한다.

33번째 줄에는 묶음의 순서를 바꿨을 때 대기 줄의 앞에서부터 묶음의 번호를 출력한다.

만약 대기 줄을 몇 묶음으로 나누고 어떻게 배열하더라도 항상 한 커플 이상이 이웃한다면 11번째 줄에 −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