시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 (추가 시간 없음) 1024 MB (추가 메모리 없음)62837631662.083%

문제

당신 앞에는 $N$명의 사람들이 있다. 각 사람은 자신을 포함하여 몇 명 이상이 거짓말을 하고 있다고 말하거나, 몇 명 이하의 사람이 거짓말을 하고 있다고 말한다.

예를 들어, 각 사람이 다음과 같이 주장한다고 하자.

  • 첫 번째 사람이 이렇게 말한다: "1명 이상이 거짓말을 하고 있다!"
  • 두 번째와 세 번째 사람이 이렇게 말한다: "1명 이하가 거짓말을 하고 있다!"
  • 네 번째 사람이 이렇게 말한다: "2명 이상이 거짓말을 하고 있다!"

이 경우에 가능한 시나리오는 다음과 같다.

  • 네 번째 사람만 거짓말을 하고 있다.
  • 두 번째와 세 번째 사람이 거짓말을 하고 있다.

사람들의 주장이 주어질 때, 거짓말을 하는 사람의 수로 가능한 것을 모두 구해라.

입력

첫째 줄에 사람의 수 $N$이 주어진다.

둘째 줄에 $N$개의 정수 $k_1,\cdots ,k_N$이 공백을 사이에 두고 주어진다.

  • $k_i$가 양의 정수라면, $i$번째 사람이 "$k_i$명 이상이 거짓말을 하고 있다"고 말했다는 뜻이다.
  • $k_i$가 0이거나 음의 정수라면, $i$번째 사람이 "$-k_i$명 이하가 거짓말을 하고 있다"고 말했다는 뜻이다.

출력

첫째 줄에 거짓말을 하는 사람의 수로 가능한 수의 개수를 출력한다.

둘째 줄에 가능한 수들을 공백을 사이에 두고 오름차순으로 출력한다.

제한

  • $1\leq N\leq 500\, 000$
  • $-N\le k_i\le N$ ($1\le i\le N$)

예제 입력 1

4
1 -1 -1 2

예제 출력 1

2
1 2

예제 입력 2

1
0

예제 출력 2

2
0 1

출처

Contest > BOJ User Contest > Good Bye, BOJ > Good Bye, BOJ 2023! B번