필로미노(Fillomino) 기술을 연습한 후, Little Cyan Fish는 게임 "The Artisan of Glimmith"에서 더 많은 훈련을 하기로 결정했습니다.
Little Cyan Fish는 먼저 당신에게 필로미노의 규칙을 소개합니다:
$m$개의 행과 $n$개의 열로 이루어진 직사각형 격자에 대해, 인접한 임의의 두 영역의 넓이가 서로 다르도록 격자를 여러 영역(각 영역의 칸들은 상하좌우로 연결되어 있어야 함)으로 나눕니다. 격자의 일부 칸에는 이미 숫자가 적혀 있습니다. 이 숫자는 해당 칸이 속한 영역의 넓이를 나타냅니다.
필로미노 퍼즐의 예시. 출처: Puzzle GP 2022 R4
이제 Little Cyan Fish는 당신에게 필로미노 보드를 주고, 이 필로미노 퍼즐에 대한 유효한 해를 아무것이나 하나 구성하고 싶어 합니다.
물론 이 문제는 Little Cyan Fish에게 너무 어렵기 때문에, 당신은 $m = 1$인 경우만 해결하면 됩니다. 다시 말해, $n$개의 칸으로 이루어진 한 행이 주어졌을 때, 다음 조건을 만족하도록 이 칸들을 여러 개의 구간(각 구간은 연속된 몇 개의 칸을 완전히 포함함)으로 나누고자 합니다:
- 인접한 임의의 두 구간은 길이가 서로 다릅니다;
- 일부 칸에는 숫자가 포함되어 있으며, 이 숫자는 해당 칸이 속한 구간에 포함된 칸의 개수를 나타냅니다.
Little Cyan Fish는 당신에게 이 보드에 대한 유효한 해가 존재하는지 판별해 달라고 요청합니다. 만약 존재한다면, 유효한 해를 아무것이나 하나 출력해야 합니다.
입력
여러 개의 테스트 케이스가 주어집니다. 입력의 첫 번째 줄에는 테스트 케이스의 개수를 나타내는 단일 정수 $T$ ($1 \le T$)가 포함됩니다.
각 테스트 케이스에 대해, 입력의 첫 번째 줄에는 정수 $n$ ($1 \le n \le 10^6$)이 포함됩니다.
다음 줄에는 $n$개의 정수 $a_1, a_2, \dots, a_n$ ($0 \le a_i \le n$)이 포함됩니다. 만약 $a_i = 0$이면, $i$번째 칸에 아무 숫자도 적혀 있지 않음을 의미합니다. 그렇지 않으면, $a_i$가 $i$번째 칸에 적혀 있음을 의미합니다.
모든 테스트 케이스에서 $n$의 합은 $10^6$을 초과하지 않음이 보장됩니다.
출력
각 테스트 케이스에 대해, 숫자를 채우는 유효한 방법이 존재하지 않으면 한 줄에 "No"를 출력합니다.
그렇지 않으면, 출력의 첫 번째 줄에 문자열 "Yes"를 출력합니다. 다음 줄에는 당신이 구성한 방법에서 각 칸이 위치한 구间的 길이를 나타내는 $n$개의 정수를 출력합니다. 조건을 만족하는 방법이 여러 개 있다면 그중 아무것이나 출력해도 됩니다.
예제
입력 1
7 3 0 0 0 4 2 0 0 0 4 0 2 0 0 6 0 3 3 0 3 0 10 2 0 0 3 0 0 4 0 0 1 6 0 0 1 1 0 0 6 1 2 3 4 5 6
출력 1
Yes 2 2 1 No Yes 1 2 2 1 No Yes 2 2 3 3 3 4 4 4 4 1 No No