Logo
(追記) (追記ここまで)

30516번 - 커플 파괴자 민욱이 (Small) 스페셜 저지

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB273795227.660%

문제

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

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

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

입력

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

2ドル$번째 줄에 각 사람의 정보를 나타내는 정수 $a_{1}, a_{2}, a_{3}, \cdots, a_{N}$ $(0 \le a_{i} \le 10^{3})$이 공백으로 구분되어 주어진다. $a_{i}$는 대기 줄의 앞에서부터 $i$번째에 서 있는 사람의 정보를 나타낸다. $a_{i} = 0$이라면 그 사람이 솔로임을, $a_i = a_j$이고 $a_i \ne 0$이라면 두 사람이 커플임을 의미한다. 0ドル$이 아닌 수가 $a_{1}, a_{2}, a_{3}, \cdots, a_{N}$에 존재한다면 그 수는 무조건 두 번 존재한다.

출력

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

1ドル$번째 줄에는 $M$의 최솟값을 출력한다.

2ドル$번째 줄에는 1ドル$번 묶음, 2ドル$번 묶음, 3ドル$번 묶음, $\cdots,ドル $M$번 묶음의 사람 수를 공백으로 구분하여 출력한다.

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

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

제한

예제 입력 1

6
3 1 1 3 2 2

예제 출력 1

3
2 3 1
1 3 2

위와 같이 사람들이 서 있을 때, $M$의 최솟값은 3ドル$이고, 가능한 경우는 아래의 3가지이다.

예제 입력 2

4
0 0 0 0

예제 출력 2

1
4
1

힌트

출처

Contest > BOJ User Contest > Small & Large Lighter Cup > 2023 4분기 Small & Large Lighter Cup B1번

(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /