쉬운 퀘스트

선물(+종류), 비용(-종류), 유니콘(0)으로 이루어진 수열에서 모든 비용을 지불할 수 있는지 판단하고, 각 유니콘에게 요청할 종류를 사전순으로 가장 작게 정한다.

보통5그리디구현배열해시맵면접 대비아직 제출이 없습니다시간 제한3초메모리 제한512 MB

문제

젊은 용사가 모험을 시작한다. 현명한 마법사가 첫 임무로 쉬운 퀘스트를 하나 내주었다. 용사는 이 퀘스트에서 마법 생물 nn마리를 정해진 순서대로 만난다. 마법사는 용사를 돕기 위해 정수 nn개로 이루어진 목록 a1,a2,,ana_1, a_2, \dots, a_n을 알려주었다.

  • aia_i가 양수이면 ii번째 생물은 선한 생물이고, 용사에게 종류가 aia_i인 마법 물건을 하나 준다. 용사는 같은 종류의 물건을 여러 개 지녀도 된다.
  • aia_i가 음수이면 ii번째 생물은 악한 생물이고, 이 생물을 물리치려면 종류가 ai-a_i인 마법 물건이 하나 필요하다. 마법 물건은 모두 약해서 한 번만 쓸 수 있다.
  • aia_i가 0이면 ii번째 생물은 유니콘이다. 유니콘은 용사가 부탁하는 종류의 마법 물건을 주는데, 딱 하나만 준다.

용사가 길에서 만나는 적을 모두 물리치고 퀘스트를 끝낼 수 있는지 판단하고, 끝낼 수 있으면 유니콘마다 어떤 종류를 부탁해야 하는지 정하라.

입력

첫째 줄에 정수 nn이 주어진다 (1n10001 \le n \le 1000).

둘째 줄에 정수 a1,a2,,ana_1, a_2, \dots, a_n이 공백으로 구분되어 주어진다 (1000ai1000-1000 \le a_i \le 1000).

출력

적을 모두 물리치는 것이 불가능하면 No를 출력한다.

가능하면 첫째 줄에 Yes를 출력하고, 둘째 줄에 용사가 유니콘을 만나는 순서대로 각 유니콘에게 부탁할 물건의 종류를 공백 하나로 구분해 출력한다. 종류는 1 이상 1000 이하의 정수여야 한다. 유니콘을 한 마리도 만나지 않으면 Yes만 출력한다.

답이 여러 가지면 사전순으로 가장 앞서는 것을 출력한다. 길이가 같은 두 수열 xxyy에서 xj<yjx_j < y_j인 위치 jj가 있고 jj보다 앞에 있는 원소가 모두 같으면, xxyy보다 사전순으로 앞선다.